Web API [FromUri] 获取方法映射

Web API [FromUri] Get Method Mapping

我很可能设置错了。但是我的 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'

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

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

试试这个:

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

然后您应该会看到它对请求的响应:localhost/v1/product/{productId}