C# 我的应用程序中错误的标准化

C# 我的应用程序中错误的标准化,c#,asp.net,iis,asp.net-web-api,C#,Asp.net,Iis,Asp.net Web Api,因此,我一直在尝试标准化我的应用程序中的所有错误处理,但我无法标准化所有错误处理 首先,我用自定义异常处理程序替换了IEExceptionHandler,方法是在WebApiConfig中这样替换它 config.Services.Replace(typeof(IExceptionHandler), new CustomExceptionHandler()); 在此之后,几乎所有的异常都是使用我想要使用的特定错误标准来处理的 不久之后,我注意到我的OWIN异常没有被捕获,所以我创建了一个中间件

因此,我一直在尝试标准化我的应用程序中的所有错误处理,但我无法标准化所有错误处理

首先,我用自定义异常处理程序替换了IEExceptionHandler,方法是在WebApiConfig中这样替换它

config.Services.Replace(typeof(IExceptionHandler), new CustomExceptionHandler());
在此之后,几乎所有的异常都是使用我想要使用的特定错误标准来处理的

不久之后,我注意到我的OWIN异常没有被捕获,所以我创建了一个中间件,它插入到任何其他OWIN管道之前,这样它就可以捕获OWIN异常并再次以标准格式返回

现在我遇到了一个新问题。在使用ASP.NET WebAPI时,我尝试创建一些REST API。由这些API中的验证引起的大多数异常都由CustomExceptionHandler捕获并标准化,但并非全部

使用标识执行GET请求时,例如:

.../test/api/superhero/marvel/wolverine%20
我从IIS获得默认的404。原因是显而易见的。我正在寻找一个由于URL中的编码空间而不存在的资源。如果我要执行一个我没有注册的请求,我也确保捕获此类异常,例如:

.../test/api/superhero/ma4rvel/wolverine
但由于某些原因,我无法捕获由流氓编码空间引起的异常。我一直在研究这个问题,最接近影响这个问题的是使用IIS web配置customError。虽然这是一种选择,但我不想使用MVC视图来实现这一点,只希望它依赖于C#编译代码

所以我想知道是否有人能给我提供另一个选择。 我要澄清的是,这远远不是必须拥有的,更是一个美好的拥有。由这种情况引起的异常不会经常发生,我对此很满意,但如果我能够解决这个问题并再次标准化我的错误,我会很高兴的


有人对此有什么建议吗?

我不确定,但问题可能是url的“ma4rvel”部分是创建控制器实例所必需的,如果没有控制器实例,您的中间件就不会被调用?@LukaszNowakowski感谢您的回答,但我认为根本不是这样。中间件不仅只用于OWIN(即身份验证),我只是简单地说,由错误写入URL(如“ma4rvel”)引起的异常实际上是由CustomExceptionHandler处理的。我使用RoutePrefix和Route创建了API。这意味着控制器有一个类似于so'[RoutePrefix(“test/api/superhero”)]的前缀,而所讨论的资源有一个类似于so'[Route(“ma4rvel/{heroname}”)]的路由。如果我没弄错的话,情况肯定不是这样,因为错误消息来自IIS管道,所以得到了404。您是否试图绕过IIS错误,让您的asp.net管道处理所有异常?@JokiesDing感谢您的评论。我确实试过了。我所能找到的只是在web.config中使用customErrors,但就我所知,这需要使用MVC视图。除非你有其他方法可以这样做?所以没有人有任何线索?我不确定,但可能问题是url的“ma4rvel”部分是创建控制器实例所必需的,没有控制器实例,你的中间件就不会被调用?@LukaszNowakowski感谢你的回答,但我认为根本不是这样。中间件不仅只用于OWIN(即身份验证),我只是简单地说,由错误写入URL(如“ma4rvel”)引起的异常实际上是由CustomExceptionHandler处理的。我使用RoutePrefix和Route创建了API。这意味着控制器有一个类似于so'[RoutePrefix(“test/api/superhero”)]的前缀,而所讨论的资源有一个类似于so'[Route(“ma4rvel/{heroname}”)]的路由。如果我没弄错的话,情况肯定不是这样,因为错误消息来自IIS管道,所以得到了404。您是否试图绕过IIS错误,让您的asp.net管道处理所有异常?@JokiesDing感谢您的评论。我确实试过了。我所能找到的只是在web.config中使用customErrors,但就我所知,这需要使用MVC视图。除非你有别的办法?所以没人知道?