相关疑难解决方法(0)

如何为C#MVC4 WebAPI应用程序全局记录所有异常?

背景

我正在为客户开发API服务层,并且我被要求在全局范围内捕获并记录所有错误.

因此,虽然通过使用ELMAH或通过向以下内容添加类似内容,可以轻松处理类似未知端点(或操作)的内容Global.asax:

protected void Application_Error()
{
     Exception unhandledException = Server.GetLastError();
     //do more stuff
}
Run Code Online (Sandbox Code Playgroud)

...不会记录与路由无关的未处理错误.例如:

public class ReportController : ApiController
{
    public int test()
    {
        var foo = Convert.ToInt32("a");//Will throw error but isn't logged!!
        return foo;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试[HandleError]通过注册此过滤器来全局设置该属性:

filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

但这也不会记录所有错误.

问题/疑问

如何拦截错误,例如通过调用/test上面生成的错误,以便我可以记录它们?似乎这个答案应该是显而易见的,但我已经尝试了迄今为止我能想到的一切.

理想情况下,我想在错误记录中添加一些内容,例如请求用户的IP地址,日期,时间等.我还希望能够在遇到错误时自动通过电子邮件发送支持人员.所有这些我都可以做到,只要我能在它们发生时拦截这些错误!

解决!

感谢Darin Dimitrov,我接受了他的回答,我弄清楚了. 的WebAPI并没有以同样的方式作为一个普通MVC控制器处理错误.

这是有效的:

1)在命名空间中添加自定义过滤器:

public class ExceptionHandlingAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        if (context.Exception is BusinessException)
        {
            throw new HttpResponseException(new …
Run Code Online (Sandbox Code Playgroud)

c# error-handling asp.net-web-api

170
推荐指数
3
解决办法
8万
查看次数

如何在ASP.NET MVC4 Web API中捕获未定义的api方法调用

ASP.NET/Mono MVC4 Web API v.1应用程序.

如何捕获未定义的api方法的调用.调用http://localhost:52216/erp/api/undefinedmethod返回错误到浏览器:

<Error>
<Message>
No HTTP resource was found that matches the request URI 'http:// localhost:52216/erp/api/undefinedmethod'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'undefinedmethod'.
</MessageDetail>
</Error>
Run Code Online (Sandbox Code Playgroud)

如何捕获此错误以记录到数据库?我试过问题的代码

如何为C#MVC4 WebAPI应用程序全局记录所有异常?

但仍未执行Application_Error和异常过滤器代码,错误将返回给浏览器.如何捕获此错误?

如果url没有api之类的话

'http://localhost:52216/erp/undefinedmethod'
Run Code Online (Sandbox Code Playgroud)

Application_Error正确执行.

使用VS2013 WebAPI项目模板的WebAPI配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

 }
Run Code Online (Sandbox Code Playgroud)

更新

我尝试改变了答案.API控制器使用表单授权,并使用标准[Authorize]属性进行修饰.如果授权失败,则标准xml api错误消息

<Error>
<Message>Authorization has been denied for this …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

6
推荐指数
1
解决办法
3285
查看次数