Web API路由,两条路由匹配

本文关键字:路由 两条 API Web | 更新日期: 2023-09-27 18:27:06

我在ApiController中设置了以下两个操作:

[POST("api/admin/image/{id}/upload")]
[Authorize(Roles = RoleNames.Administrator)]
public Foo UploadVersion(int id)
public Bar Post(int id, Baz x) {}

考虑到这种路由配置,它们是冲突的:

context.Routes.MapHttpRoute(
    name: "Admin_Api",
    routeTemplate: "api/admin/{controller}/{id}",
    defaults: new 
        {
             id = RouteParameter.Optional
        });

我的猜测是,UploadVersion也通过路由映射获得了某种默认路由,但我如何防止这种情况发生?

如果有人想知道我想做什么:

POST /api/admin/image/{id}/upload -> UploadVersion()
POST /api/admin/image/{id}        -> Post()

Web API路由,两条路由匹配

根据您设置的路由,它们是相同的路由,无法区分。你每次都会得到这条路线:

POST /api/admin/image/{id}        -> Post()

尝试修改你的路线,使其看起来像这样:

POST /api/admin/image/upload/{id} -> UploadVersion()
POST /api/admin/image/{id}        -> Post()