2017-04-11 630 views
1

我正在寻找一种方法,以便能够在customAuthorization期间访问OnAuthorize方法中的Post请求的参数。如何在WebAPI中的AuthorizeAttribute的onAuthorization方法中访问Post请求的参数

我看了其他线程,并尝试了下面的方法,但没有奏效。

在这种情况下,ActionArguments是空的。

AgentSummaryParams summary = (AgentSummaryParams)actionContext.ActionArguments["AgentSummaryParams"]; 
     string userID = (string)actionContext.ActionArguments["UserID"]; 

以下面的方式查询是空字符串。

var queryString = HttpUtility.ParseQueryString(actionContext.Request.RequestUri.Query); 
    var myQueryParam = queryString["MyValue"]; 

我无法在请求对象上找到方法GetQueryNameValuePairs()。

var queryParameters = actionContext.Request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value); 

var some_value = queryParameters.ContainsKey("some_key") 
     ? queryParameters["some_key"] : string.Empty; 

有人请让我知道如何能够访问下面的方法中的HttPost方法的请求参数?

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     ModelParamssummary = (ModelParams)actionContext.ActionArguments["ModelParams"]; 
     string userID = (string)actionContext.ActionArguments["UserID"];   

    } 
} 

回答更新

var request = actionContext.Request.Content.ReadAsStringAsync().Result; 
      JObject Obj = JObject.Parse(request); 
      UseID = (string)Obj["UserID"]; 

最后两行让我刚刚得到确切的键值对我期待的。

回答

1

当你说POST所以数据会后在体内,

你可以得到的字符串值,然后将其转换为模型

var request = actionContext.Request.Content.ReadAsStringAsync().Result 

使用输出串并转换为模型

+0

非常感谢你,它的工作!我已经用您提供的完整解决方案更新了我的答案。 – Blossom