在 Asp.net Web API 中捕获 404 错误
Posted
技术标签:
【中文标题】在 Asp.net Web API 中捕获 404 错误【英文标题】:Catch 404 errors in Asp.net Web API 【发布时间】:2013-12-04 14:11:29 【问题描述】:我正在尝试捕获由 Asp.net Web API 服务器返回的 404 错误。
但是,来自 Global.asax 内部的Application_Error
并没有捕捉到它们。
有没有办法处理这些错误?
【问题讨论】:
你想通过这个实现什么目标? 我试图向用户返回友好的错误消息,而不是返回 IIS html 页面。 (该项目只能使用带有 JSON 或 XML 响应的 API 调用来请求) 您是否可以完全控制ApiController
s 的代码?
【参考方案1】:
您可能想看看Handling HTTP 404 Error in ASP.NET Web API,它有一个分步示例
【讨论】:
感谢您提供的精彩链接。我昨天正在为我的 Web API 项目寻找类似的东西,但不知何故它没有出现在我的搜索结果中。 这是一个很好的链接,谢谢。不幸的是,它不会捕获所有 404 错误。例如,输入localhost:34123/xxyyzz 不会被捕获。 不幸的是,由于使用了属性路由,我无法完成这项工作。【参考方案2】:我知道这是旧的,但我也只是在寻找它,并找到了一种似乎可行的非常简单的方法,所以我想添加以防万一这可以帮助其他人。
我找到的适合我的解决方案是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
(没有命名控制器前缀),效果也很好。
【讨论】:
以上是关于在 Asp.net Web API 中捕获 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 4,Web API - 404 未找到
Asp.Net Web API 阻止 404 页面上的任意文本