我有几个自己的控制器,路由基本上是由属性组成的。问题是,当我用 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
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消