Web API [FromUri]获取方法映射

时间:2018-11-14 16:49:10

标签: c# rest asp.net-web-api asp.net-web-api2

我很可能会将此设置错误。但是我的Web api控制器中的get方法。

SELECT junc.id, 
       typ.word_type, 
       mean.meaning
FROM junc_meaning_word_type AS junc
JOIN hgs_word_types AS typ
  ON junc.word_type_id = typ.id
JOIN hgs_meanings AS mean 
  ON junc.meaning_id = mean.id

在请求中,我具有Guid ProductId

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

我希望请求网址看起来像localhost / v1 / product / 123

但它是localhost / v1 / product / {ProductId}?productId = 123&request.productId = 123'

如果我放弃路线{productId:guid} 我得到localhos / v1 / product?request.productId = 123',这也很奇怪。不确定为什么要在URL中使用request.productId。

1 个答案:

答案 0 :(得分:1)

您有两个指示MVC解析输入值的地方:[Route]属性,以及控制器方法参数上的[FromUri]属性。

尝试一下:

  1. 从控制器方法中删除[FromUri]
  2. 将控制器参数更改为Guid productId,与您的属性路由配置[Route({productId:guid})]的值匹配。

然后您应该看到它对以下位置的请求做出了响应:localhost/v1/product/{productId}