Веб-API [FromUri] Получить метод сопоставления - PullRequest
0 голосов
/ 14 ноября 2018

Я вполне мог бы неправильно это настроить.Но мой метод get в моем контроллере веб-API.

    [HttpGet]
    [Route("{productId:guid}", Name = nameof(GetProduct))]
    [ResponseType(typeof(Product))]
    public async Task<IHttpActionResult> GetProduct([FromUri]GetProductRequest request)

внутри запроса у меня есть Guid ProductId

public class GetProductRequest 
{
    public const string ProductIdRequired = nameof(ProductId) + " cannot be empty";

    [Required(ErrorMessage = ProductIdRequired)]
    public Guid ProductId { get; set; }
}

Я ожидал, что URL запроса будет выглядеть примерно как localhost / v1 / product / 123

, но этоэто localhost / v1 / product / {ProductId}? productId = 123 & request.productId = 123 '

, если я отбрасываю Route {productId: guid}, я получаю localhos / v1 / product? request.productId = 123', которыйтоже странно.Не уверен, почему он хочет request.productId в URL.

1 Ответ

0 голосов
/ 14 ноября 2018

У вас есть два места, где вы указываете MVC проанализировать входное значение: атрибут [Route], плюс атрибут [FromUri] в параметре метода контроллера.

Попробуйте это:

  1. Удалите [FromUri] из метода контроллера.
  2. Измените параметр контроллера просто на Guid productId, что соответствует значению конфигурации вашего атрибута маршрута [Route({productId:guid})].

Затем вы должны увидеть ответ на запросы по адресу: localhost/v1/product/{productId}

...