为什么 MapHttpAttributeRoutes() 不添加来自属性的路由?

我有几个自己的控制器,路由基本上是由属性组成的。问题是,当我用 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 (""),另一个由 MapHttpRoute() 调用提供("api/ {控制器}/{id}”)。我的问题是 - 如何通过属性正确配置路由?


倚天杖
浏览 150回答 1
1回答

慕码人2483693

您的控制器级路由前缀应以“api”开头,如下所示:[RoutePrefix("api/register")] public class RegisterController : ApiController
打开App,查看更多内容
随时随地看视频慕课网APP