Можно ли иметь два контроллера с одинаковым маршрутом? - PullRequest
1 голос
/ 16 января 2020

Возможно ли иметь два контроллера в двух сборках с одинаковым атрибутом префикса маршрута, но с разными атрибутами маршрута в действиях?

    [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)
        { }          
    }

Ответы [ 2 ]

1 голос
/ 24 января 2020

Это возможно. Моя проблема заключалась в том, что первый контроллер определил действие DELETE с маршрутом "{id}". Поскольку id был неограниченным параметром, Web Api не мог видеть разницу между «api / route / action2» и «api / route / idtodelete».

В итоге я создал ограничение regex для удаления, которое исключает "action2" и разрешает все символы alpanumeri c. Теперь это работает.

[HttpDelete]
[Route("{id:regex(^(?!action2)[a-zA-Z0-9]*$)}")]
0 голосов
/ 24 января 2020

Если вы используете другой Маршрут для всех методов действия, чем он будет работать. Но если вы используете тот же префикс Route с тем же действием Route, чем это, вы получите ошибку.

...