C# 绑定不带操作参数的WebAPI属性

C# 绑定不带操作参数的WebAPI属性,c#,asp.net-web-api,model-binding,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方法中移出。为此

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

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

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

    // Do Stuff....
}
我想将所有的客户查询从action方法中移出。为此,我创建了一个action filter属性,方法是查看action参数的值并设置一个request属性:

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
KeyValuePair-argument=actionContext.ActionArguments.Single(kvp=>kvp.Key.Equals(ParameterName));
Guid customerGuid=(Guid)argument.Value;
//进行客户查询,如果需要,返回404
//将客户添加到请求属性

这是可行的,但是我仍然需要在我的操作签名中包含现在冗余的Guid。如果删除此项,则查找Guid值的方法将失败。有没有一种方法可以绑定URI中的值,而不将该值作为操作参数

必须将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方法中指定参数

public IHttpActionResult GetDetails()
{
  //Do stuff
}

如果用户拨打电话,客户id是否为id?或者用户正在打电话查看特定客户?如果是前者,那么这就是身份验证和授权操作过滤器的用途。