如果路由不匹配,则Web API句柄404

时间:2018-04-06 08:08:49

标签: c# asp.net-web-api routing

我正在使用Web API 2.现在我的路由表是

public void RegisterRoute(HttpRouteCollection routes) {
    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

这适用于网址:

http://localhost/api/user
http://localhost/api/user/4

当我指定不存在控制器名称(http://localhost/api/abcd)时,结果为JSON

{"message":"No HTTP resource was found that matches the request URI 'http://loocalhost/api/abc'."}

我需要为url返回相同的结果:

http://localhost/api/abc/abc/abc/abc
http://localhost/abc/abc/abc/abc
http://localhost/a

现在我有了

enter image description here

如何为所有不匹配的路由返回带有404代码的JSON?

注意:某些操作(如http://localhost/api/user/4)也可以返回404,并且正文中包含一些数据。因此,如果路线不匹配,我需要有可能处理动作404和404.

请建议。我试过这个

<httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="404" />
            <error statusCode="404" responseMode="ExecuteURL" path="/Error/Missing" />
 </httpErrors>

但是返回404的操作也会重定向到/Error/Missing

1 个答案:

答案 0 :(得分:0)

你需要为此设置默认值,目前只将ID字段视为默认值而不是控制器。像这样更新你的默认路线

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });