【问题标题】:Why MapHttpAttributeRoutes() does not add routes from attributes?为什么 MapHttpAttributeRoutes() 不从属性添加路由?
【发布时间】:2019-08-21 17:18:03
【问题描述】:

我有几个自己的控制器,路由基本上是由属性组成的。问题是,当我用 Postman 模拟我的 http 请求时,程序似乎不知道所提供的路由。

我的控制器看起来像这样:

[RoutePrefix("register")]
public class RegisterController : ApiController
{
    private readonly IRegisterService _service;

    public RegisterController(IRegisterService service)
    {
        _service = service;
    }

    [HttpPost]
    [Route("simple")]
    public void RegisterSimple(RegisterArgs args)
    {
        _service.RegisterSimple(args);
    }
}

请注意,Global.asax.cs 调用了与 Web Api 2 兼容的配置:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);

        // DI Registrations
    }
}

... 和 WebApiConfig 调用 MapHttpAttributeRoutes() :

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

当我尝试使用 uri 从 Postman 调用 POST 方法时

http://localhost:63575/api/register/simple

我得到以下答案:

{
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost:63575/api/register/simple'.",
    "MessageDetail": "No action was found on the controller 'Register' that matches the request."
}

我确实认为问题出在路由配置中。我对其进行了调试,在两个方法调用(config.MapHttpAttributeRoutes() 和 config.Routes.MapHttpRoute)之后,配置只有两个路由:一个是空的 RouteTemplate(“”),另一个是从 MappHttpRoute() 调用(“api/ {控制器}/{id}”)。 我的问题是 - 如何正确配置通过属性的路由?

【问题讨论】:

    标签: c# routes asp.net-web-api2


    【解决方案1】:

    您的控制器级路由前缀应以“api”开头,如下所示:

    [RoutePrefix("api/register")]
    public class RegisterController : ApiController
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      相关资源
      最近更新 更多