【问题标题】:Web API handle 404 if route not match如果路由不匹配,Web API 句柄 404
【发布时间】:2018-04-06 08:08:48
【问题描述】:

我正在开发 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

现在我有

如何为所有不匹配的路由返回带有 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 但是我没有 Home 控制器
    • 它没有帮助:(
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2015-11-07
    • 2019-11-25
    相关资源
    最近更新 更多