C# 找不到web api 2路由
我的路线配置如下所示C# 找不到web api 2路由,c#,asp.net-web-api2,asp.net-web-api-routing,route-constraint,C#,Asp.net Web Api2,Asp.net Web Api Routing,Route Constraint,我的路线配置如下所示 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
[RoutePrefix("api/users/{userId:Guid}/locations")]
public partial class UsersController : MyCustomApiController
{
[Route("{locationId:Guid}/list")]
[HttpPost]
public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
{
}
}
public partial class UsersController : MyCustomApiController
{
[Route("{locationId:Guid}/insert")]
[HttpPut]
public async Task<IHttpActionResult> InsertUser(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
{
}
}
我将我的用户控制器按操作划分为单独的文件,因此所有的GET
操作都在GetUserController.cs
文件中,PUT
操作都在PutUserController.cs
中,依此类推
GET
文件有这样一个分部类
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
[RoutePrefix("api/users/{userId:Guid}/locations")]
public partial class UsersController : MyCustomApiController
{
[Route("{locationId:Guid}/list")]
[HttpPost]
public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
{
}
}
public partial class UsersController : MyCustomApiController
{
[Route("{locationId:Guid}/insert")]
[HttpPut]
public async Task<IHttpActionResult> InsertUser(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
{
}
}
无论我做什么,我总是得到一个404错误。我正在使用Content-Type
作为application/json
我使用的URL是
http://localhost:52450/api/users/3F3E0740-1BCB-413A-93E9-4C9290CB2C22/locations/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/list
带有POST
,因为我无法使用GET
为第一个方法发布复杂类型
及
http://localhost:52450/api/users/3F3E0740-1BCB-413A-93E9-4C9290CB2C22/位置/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/插入和放置
如果需要,我还需要在路由配置中设置哪些路由
编辑
奇怪的是,另一个控制器也是一个部分类,似乎使用相同的配置
[RoutePrefix("api/products")]
public partial class ProductController : MyCustomApiController
{
[Route("insert")]
[HttpPut]
public async Task<IHttpActionResult> InsertProduct([FromBody] InsertProductRequest request)
{
}
}
这是用于配置Web API路由的错误配置文件
//global.asax.cs
GlobalConfiguration.Configure(WebApiConfig.Register); // <-- WEB API
RouteConfig.RegisterRoutes(RouteTable.Routes); // <-- MVC
此外,Guid
的路由约束也错误。它应该是{parameterName:guid}
[RoutePrefix("api/users/{userId:guid}/locations")]
public partial class UsersController : MyCustomApiController {
[HttpPost]
[Route("{locationId:guid}/list")]
public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request) { ... }
}
[RoutePrefix(“api/users/{userId:guid}/locations”)]
公共部分类UsersController:MyCustomApicController{
[HttpPost]
[路由(“{locationId:guid}/list”)]
公共异步任务GetUsers(Guid userId,Guid locationId,[FromBody]Contracts.UserRequest请求){…}
}
来源:您可以在WebApiConfig中尝试这样做:
config.MapHttpAttributeRoutes();
var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
谢谢你的回复。我没有其他部分文件的前缀。问题中错误地抄袭了这一点。我已经改正了。在第二个技巧中,WebApiConfig.cs中的config.MapHttpAttributeRoutes()调用Routeconfig.cs中的RegisterRoutes
方法,不,它不调用。仔细看。MVC和Web API有两种不同的注册方式,这很奇怪。我在同一个项目中有另一个控制器可以工作。它也是一个偏类。将用这些细节更新我的主要问题。此外,我在路由配置中设置了一个断点,并从WebApiConfig调用了routeconfig.cs中的registerroutes。cs@user20358,除非你改变了什么,否则我可以向你保证情况并非如此。显示你的启动。没有startup.cs,它只是我将添加到主要问题中的global.asax