我的路线配置看起来像这样
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 错误。我正在使用 Postman 进行测试我正在使用Content-Type
的application/json
URL 是使用
http://localhost:52450/api/users/3F3E0740-1BCB-413A-93E9-4C9290CB2C22/locations/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/list
a ,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;
}