ASP .NET WebAPI и правильная маршрутизация - PullRequest
0 голосов
/ 30 октября 2018

Существует контроллер WebAPI v1 со следующим набором методов:

 public class MailMessagesController : ApiController
 {
     [HttpPost]
     [ActionName("Attachments")]
     public HttpResponseMessage Attachments([FromUri] int id) {...}

     [HttpPost]
     public HttpResponseMessage Post() {...}
 }

И соответствующая маршрутизация (второй маршрут используется также для пары других контроллеров):

routes.MapHttpRoute(
    name: "mailMessages",
    routeTemplate: "v1/mailMessages/{id}/{*action}",
    defaults: new { controller = "mailMessages", action = "" }
);

routes.MapHttpRoute(
    name: "Widget",
    routeTemplate: "v1/widgets/{controller}"
);

Итак, вы видите, что основная идея выше - отправлять новые сообщения с POST и публиковать новые вложения (также с POST) в существующее почтовое сообщение.

Проблема возникает, когда вы пытаетесь связать Swagger / Swashbuckle с вышеуказанной настройкой, в основном она жалуется (выдает ошибки), что

Несколько операций с путем 'v1 / widgets / mailMessages' и методом 'POST'

И это вполне понятно, поскольку он рассматривает Attachments -метод как еще один POST.

Какой будет подходящая маршрутизация для игнорирования / удаления POST mailMesage с идентификатором, , когда действие не указано ?

(я знаю об уловке с ResolveConflictingActions в Swashbuckle, но я бы предпочел создать правильную маршрутизацию, чем скрывать несоответствия с помощью "swagging".)

...