是否可能有两个具有相同路径的控制器?

问题描述 投票:0回答:2

是否有可能在两个程序集中使两个控制器具有相同的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)
        { }          
    }
asp.net-web-api asp.net-web-api-routing webapi
2个回答
1
投票

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

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

[HttpDelete]
[Route("{id:regex(^(?!action2)[a-zA-Z0-9]*$)}")]

0
投票

如果您对所有操作方法使用不同的Route,则将无法使用。但是,如果您对相同的Route前缀使用相同的Route动作,则会产生错误。

© www.soinside.com 2019 - 2024. All rights reserved.