绑定没有操作参数的WebAPI属性

时间:2017-03-29 14:02:03

标签: c# asp.net-web-api model-binding

我们的许多Web API操作模式都有以下模式:

public IHttpActionResult GetDetails(Guid customerGuid)
{
    Customer customer = customerRetriever.FromGuid(customerGuid);

    if (customer == null)
        return NotFound();

    // Do Stuff....
}

我想将所有客户查找锅炉板移出操作方法。我创建了一个动作过滤器属性来执行此操作,方法是查看action参数的值并设置请求属性:

KeyValuePair<String, Object> argument = actionContext.ActionArguments.Single(kvp => kvp.Key.Equals(ParameterName));
Guid customerGuid = (Guid)argument.Value;
// Do customer lookup, return 404 if needed
// Add customer to request properties

这样可行,但我仍然需要在我的动作签名中包含现在多余的Guid。如果我删除它,我找到Guid值的方法失败。有没有办法绑定URI中的值,而不将该值作为操作参数?

1 个答案:

答案 0 :(得分:0)

您必须将customerGuid作为queryString参数传递,例如http://localhost:61374/api/values?customerGuid=D09584F2-0B81-4855-8F33-567F4EF8096C  然后,您可以在操作过滤器中获取查询字符串值:

  public class CustomFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var queryStringValues = actionContext.Request.GetQueryNameValuePairs();
        var customerGuid = queryStringValues.FirstOrDefault(x => x.Key == "customerGuid").Value;
        //Your logic
    }
}

现在无需在API方法中指定params

public IHttpActionResult GetDetails()
{
  //Do stuff
}