【发布时间】:2017-02-28 18:25:08
【问题描述】:
我的路线配置如下所示
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 }
);
}
我将我的用户控制器按操作划分为单独的文件,因此所有GET 操作都在GetUserController.cs 文件中,PUT 操作在PutUserController.cs 中等等...
GET 文件有一个像这样的部分类
[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)
{
}
}
PUT 文件有一个像这样的部分类
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 使用 Postman 进行测试
我使用的网址是
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/locations/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/insert 和 PUT
如果需要的话,我还需要在路由配置中设置哪些其他路由?
编辑
奇怪的是,另一个也是部分类的控制器似乎可以使用相同的配置
[RoutePrefix("api/products")]
public partial class ProductController : MyCustomApiController
{
[Route("insert")]
[HttpPut]
public async Task<IHttpActionResult> InsertProduct([FromBody] InsertProductRequest request)
{
}
}
这是连接一切的global.asax.cs。
protected void Application_Start(object sender, EventArgs e)
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterConfig.RegisterFilters(GlobalFilters.Filters);
// Only allow Tls1.2!
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
}
【问题讨论】:
标签: c# asp.net-web-api2 asp.net-web-api-routing route-constraint