1

是否可以在两个程序集中有两个控制器具有相同的 Route 前缀属性,但操作上的 Route 属性不同?

    [RoutePrefix("api/route")]
    public class Controller1 : ApiController
    {
        [Route("action1")]
        [HttpPost]
        public async Task<HttpResponseMessage> Post([FromBody] string body)
        { }      

        [Route("{id}")]
        public async Task<HttpResponseMessage> Delete(string id)
        { }    
    }

    [RoutePrefix("api/route")]
    public class Controller2 : ApiController
    {
        [Route("action2")]
        [HttpPost]
        public async Task<HttpResponseMessage> Post([FromBody] string body)
        { }          
    }
4

2 回答 2

1

这个有可能。我的问题是第一个控制器使用路由“{id}”定义了一个删除操作。由于 id 是一个不受约束的参数,Web Api 无法看到“api/route/action2”和“api/route/idtodelete”之间的区别。

我最终在删除上创建了一个正则表达式约束,它排除了“action2”并允许所有字母数字字符。现在它起作用了。

[HttpDelete]
[Route("{id:regex(^(?!action2)[a-zA-Z0-9]*$)}")]
于 2020-01-24T12:17:38.097 回答
0

如果您对所有操作方法使用不同的路线,那么它将起作用。但是,如果您使用相同的 Route 前缀和相同的 Route 操作,则会出现错误。

于 2020-01-24T12:38:14.417 回答