【问题标题】:Web API [FromUri] Get Method MappingWeb API [FromUri] 获取方法映射
【发布时间】:2019-04-17 17:01:09
【问题描述】:

我很可能设置错了。但是我的 web api 控制器中的 get 方法。

    [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。

【问题讨论】:

  • 你需要用[FromRoute]装饰房子
  • @DanielA.White 你只能在 asp.net core 中使用[FromRoute]

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


【解决方案1】:

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

试试这个:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多