我们的许多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中的值,而不将该值作为操作参数?
答案 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
}