在Asp.net Web API中捕获404错误

时间:2013-11-20 14:20:50

标签: asp.net error-handling asp.net-web-api

我正在尝试捕获由Asp.net Web API服务器返回的404错误。

但是,Global.asax中的Application_Error没有抓住它们。

有没有办法处理这些错误?

2 个答案:

答案 0 :(得分:9)

您可能需要查看具有分步示例的Handling HTTP 404 Error in ASP.NET Web API

答案 1 :(得分:1)

我知道这已经过时了,但我也只是在寻找这个,并找到了一种似乎很有效的方法,所以我想加上这可以帮助别人。

我发现,对我有用的解决方案是here。此外,这可以与属性路由(我使用)混合使用。

所以,在我的(Owin)Startup课程中,我只添加了类似的东西。

public void Configuration(IAppBuilder app)
{      
     HttpConfiguration httpConfig = new HttpConfiguration();   
     //.. other config

     app.UseWebApi(httpConfig);

     //...
     // The I added this to the end as suggested in the linked post
     httpConfig.Routes.MapHttpRoute(
       name: "ResourceNotFound",
         routeTemplate: "{*uri}",
         defaults: new { controller = "Default", uri = RouteParameter.Optional });
    // ...

 }

  // Add the controller and any verbs we want to trap
  public class DefaultController : ApiController
  {
      public IHttpActionResult Get(string uri)
      {      
      return this.NotFound();
      }

      public HttpResponseMessage Post(string uri)
      {       
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.NotFound, "I am not found");
        return response;
      } 
   }    

上面你可以返回任何错误对象(在这个例子中,我只是为我的POST返回一个字符串“我找不到”。

我按照@Catalin的建议尝试了xxyyzz(没有命名控制器前缀),这也很有用。