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]
属性。
试试这个:
- 从控制器方法中删除
[FromUri]
。
- 将控制器参数更改为
Guid productId
,这与您的属性路由配置的值匹配 [Route({productId:guid})]
。
然后您应该会看到它对请求的响应:localhost/v1/product/{productId}
我很可能设置错了。但是我的 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]
属性。
试试这个:
- 从控制器方法中删除
[FromUri]
。 - 将控制器参数更改为
Guid productId
,这与您的属性路由配置的值匹配[Route({productId:guid})]
。
然后您应该会看到它对请求的响应:localhost/v1/product/{productId}