QueryString с MVC 5 AttributeRouting в веб-API 2

У меня есть следующий код

[HttpGet] 
[Route("publish/{id}")] 
public IHttpActionResult B(string id, string publishid=null) { ... }

Итак, насколько я понял,

~/..../publish/1?publishid=12
~/..../publish?id=1&publishid=12

Должен работать и связывать оба параметра, но он не будет работать во втором случае. В первом случае publishid не будет связан.

Поэтому я не понимаю, почему это не работает. Есть идеи, почему так?

1 ответ

Решение

Второй случай не будет работать, потому что id является обязательной переменной в шаблоне маршрута publish/{id}, В Web API сначала выполняется сопоставление шаблона маршрута, а затем процесс выбора действия.

другие случаи:

  1. publish/1 - не будет работать как действие B говорит, что publishid требуется. Чтобы предотвратить это, вы можете изменить подпись действия на что-то вроде B(string id, string publishid=null) и только id связан
  2. publish/1?publishid=10 - работает, как и ожидалось, где оба связаны.
Другие вопросы по тегам