【发布时间】:2017-03-30 17:53:09
【问题描述】:
我们的许多 Web API 操作模式都具有以下模式:
public IHttpActionResult GetDetails(Guid customerGuid)
{
Customer customer = customerRetriever.FromGuid(customerGuid);
if (customer == null)
return NotFound();
// Do Stuff....
}
我想将所有客户查找样板移出操作方法。我创建了一个操作过滤器属性来执行此操作,方法是查看操作参数的值并设置请求属性:
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 中绑定一个值,而无需将该值作为操作参数?
【问题讨论】:
-
如果用户拨打电话,客户ID是ID吗?还是用户打电话来查看特定客户?如果是前者,那么这就是身份验证和授权操作过滤器的用途。
标签: c# asp.net-web-api model-binding