我使用一个中间件来处理api中的异常,比如:中间件中的app.UseMiddleware<ApiErrorHandlerMiddleware>(),我按如下方式定制了api响应:
使用refit时,我希望将原始异常保留在api中,而不是像下面这样的异常:
Refit.ApiException: Response status code does not indicate success: 500 (Internal Server Error).
at Refit.RequestBuilderImplementation.<>c__DisplayClass
我有这两个方法,而且我肯定知道DoSomethingAsync返回一个FormatException。然而,它总是在最后一次捕获的“异常”中捕获。
为什么CallSomethingAsync从来没有抓到FormatException?
public Task DoSomethingAsync()
{
//Do something that throws a FormatException
return Task.FromResult(0);
}
public virtua
我认为我需要在C# 5.0中编写一个或多个自定义异常。我可能不是,但似乎.NET提供的异常属于一个过于系统和过于通用的异常域--非常特定于“在CLR上运行程序支持文件I/O”的情况。这正是我所拥有的,至少,当然。不过,在尝试用C#或任何其他面向对象语言开发应用程序时,您所创建的新类型的子集(或全部)在大多数情况下都应该来自概念本体,而概念本体与CLR或.NET框架这样的系统域没有任何关系。这就是我对OO开发的“创作”部分的看法--但这是一个完全不同的问题。
因此,关于创建自定义异常的“问题”,我想知道下面的解决方案是否有任何缺陷。
假设我创建了这个枚举和自定义异常:
public enum M
为什么抛出此异常更可取
Throw New DivideByZeroException("You can't divide by zero")
在这个一般的问题上:
Throw New Exception("You can't divide by zero")
在这个特定的示例中获得了什么优势?这条消息已经说明了一切。从基异常类继承的标准子类是否具有与基类不同的方法?我还没有看到一个案例,但我必须承认我倾向于抛出基本异常。
我目前有一个类,它只抛出一种类型的异常,但具有不同的异常代码:
class Foo
{
public static function method($var)
{
if ($condition1) {
throw new FooException('XXX', 'FORMAT');
}
if ($condition2) {
throw new FooException('XXX', 'RANGE');
我在C#做一个小小的业余爱好项目,我不太懂这门语言,偶然发现了以下几个方面:
假设您有一个使用BackgroundWorker实现的异步操作。现在,如果有异常,事件RunWorkerCompleted将被引发,RunWorkerCompletedEventArgs.Error将为非空。
下面是处理不同异常类型的规范方法吗?(这里所有的异常类型都是兄弟姐妹WRT继承)
if (e.Error != null)
{
FirstKindOfException e1 = e as OneKindOfException;
SecondKindOfException e2 = e as S
我有一个通过现有代码使用的错误日志函数。如果可能的话,我希望通过检测何时从catch块调用它来从可用的异常中提取额外的信息来改进它。在catch块期间,您可以重新抛出异常并在本地捕获它。
void log_error()
{
try {
throw; // Will rethrow the exception currently being caught
}
catch (const std::exception & err) {
// The exception's message can be obtained
Java有“检查异常”,这迫使方法的调用者要么处理异常,要么重新抛出异常。
// requires ParseException to be handled or rethrown
int i = NumberFormat.getIntegerInstance().parse("42").intValue();
其他较新的语言,如Go和Rust,则使用多个返回值:
i, err := strconv.Atoi("42") // Go
match "42".parse::<i32>() { // Rust
Ok(n)
我目前正在编写一个.net REST web api,并且正在使用自定义异常,这样我就可以将详细信息以及正确的http响应发送回客户端,以与REST保持兼容。但是看起来我明确地抛出了很多异常。
例如:我有一个上传图像文件的API。这些图像文件必须是特定的文件格式,并且小于特定的大小。如果我的代码发现图像的文件格式错误,我会抛出一个新的自定义异常,如下所示:
throw new FileTypeException();
或者,如果文件太大,意味着file.Size()大于我在web.config中设置的数量,我会抛出一个不同的自定义异常,如下所示:
throw new FileSizeExcep