为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
倚天杖 2022-11-21 20:33:55
我有几个自己的控制器,路由基本上是由属性组成的。问题是,当我用 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}”)。我的问题是 - 如何通过属性正确配置路由?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

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

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


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号