是否有可能在两个程序集中使两个控制器具有相同的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)
{ }
}
这是可能的。我的问题是,第一个控制器使用路由“ {id}”定义了DELETE操作。由于id是不受限制的参数,因此Web Api无法看到“ api / route / action2”和“ api / route / idtodelete”之间的区别。
我最终在删除操作上创建了一个正则表达式约束,该约束排除了“ action2”并允许所有字母数字字符。现在可以使用。
[HttpDelete]
[Route("{id:regex(^(?!action2)[a-zA-Z0-9]*$)}")]
如果您对所有操作方法使用不同的Route,则将无法使用。但是,如果您对相同的Route前缀使用相同的Route动作,则会产生错误。