ASP.net web api 2 路由属性不工作

ASP.net web api 2 Route-Attribute not working

我有以下问题,我的路由属性不起作用。

我有以下操作:

[HttpGet]
[Route("~api/admin/template/{fileName}")]
public HttpResponseMessage Template(string fileName)
{
    return CreateHtmlResponse(fileName);
}

并且我想访问像 .../api/admin/template/login.html 这样的操作,以便模板获得 login.html 作为文件名传递。

但我总是得到:No HTTP resource was found that matches the request URI 'http://localhost:50121/api/admin/template/login.html'

以下请求有效:/api/admin/template?fileName=login.html

有谁知道我的路由有什么问题吗?

编辑:

我的路由配置

config.Routes.MapHttpRoute(
                    "API Default", "api/{controller}/{action}",
                    new { id = RouteParameter.Optional });

在您的 WebApiConfig

中尝试此路由
        // Web API routes
        config.MapHttpAttributeRoutes();

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

您必须添加 RoutePrefix

您必须调用 MapHttpAttributeRoutes() 以便框架能够遍历您的属性并在应用程序启动时注册适当的路由:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        // you can add manual routes as well
        //config.Routes.MapHttpRoute(...
    }
}

MSDN

try adding a forward slash after the tilde
[HttpGet]
[Route("~/api/admin/template/{fileName}")]
public HttpResponseMessage Template(string fileName)
{
    return CreateHtmlResponse(fileName);
}

对于我的 Web API 2 项目,我必须向控制器添加一个 [RoutePrefix("events")] 以使其获取操作路由属性。

检查您的路由属性的命名空间。应该是 System.Web.Http 而不是 System.Web.Mvc.

在我的例子中,我将 Route("api/dashboard") 添加到 api 控制器。 将其更改为 RoutePrefix("api/dashboard") 。它完美地工作。 你还需要 config.MapHttpAttributeRoutes(); 在 webapiconfig.cs

确认您使用的是 System.Web.Http.RouteAttribute 而不是 System.Web.Mvc.RouteAttribute