路由错误:未找到与请求 URI 匹配的 HTTP 资源

Posted

技术标签:

【中文标题】路由错误:未找到与请求 URI 匹配的 HTTP 资源【英文标题】:Routing error: No HTTP resource was found that matches the request URI 【发布时间】:2019-08-27 19:42:58 【问题描述】:

我正在尝试进行 API 调用

http://localhost:56578/v1/reports

调用我的GetReports() 方法。

但是我继续收到主题中的错误消息。

我在这里通过路由前缀关注 ms 文档:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#route-prefixes

我做错了什么?

ReportV1Controller.cs

[Authorize]
[RoutePrefix("v1/reports")]
....
....
[Route("")]
public IHttpActionResult GetReports()

WebApiConfig.cs

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/controller/action/id",
    defaults: new  id = RouteParameter.Optional 
);

【问题讨论】:

【参考方案1】:

从此改变:

[RoutePrefix("v1/reports")]

到这里:

[RoutePrefix("api/v1/reports")]

因为:

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/controller/action/id",
        defaults: new  id = RouteParameter.Optional 
    );

routeTemplate: "api/controller/action/id",你说所有路径的前缀都是apicontroller/action/id 是占位符

结论:如果你要在任何地方使用v1前缀,把它代替api

【讨论】:

【参考方案2】:

如果您在WebApiConfig 中启用了属性路由,您应该可以工作

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        // Attribute routing.
        config.MapHttpAttributeRoutes(); //<-- THIS HERE

        // Convention-based routing.
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/action/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

参考Attribute Routing in ASP.NET Web API 2: Enabling Attribute Routing

假设

[Authorize]
[RoutePrefix("v1/reports")]
public class ReportV1Controller : ApiController 

    //GET v1/reports
    [Route("")]
    [HttpGet]
    public IHttpActionResult GetReports() 
        //...
    

【讨论】:

以上是关于路由错误:未找到与请求 URI 匹配的 HTTP 资源的主要内容,如果未能解决你的问题,请参考以下文章

出现错误:redirect_uri_mismatch 请求中的重定向 URI:http://localhost:8080/oauth2callback 与注册的重定向 URI 不匹配

找到了与名为“Home”的控制器匹配的多种类型。 (奇怪的错误)

简谈http状态码

报错:ASP.NET Web API中找不到与请求匹配的HTTP资源

为啥这里“找不到与请求 URI 匹配的 HTTP 资源”?

IIS Express错误http 404.17 - 未找到运行WCF服务