如何使用web api中的Request读取post表单参数值?我有一个控制器
[Route("")]
[HttpPost]
[AuthenticationAttribute]
public void PostQuery()
{
//some code
}
我已单独定义AuthenticationAttribute类
public class AuthenticationAttribute : Attribute, IAuthenticationFilter
{
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
// I want to read the post paramter values over here
}
public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
return Task.Run(
() =>
{
});
}
public AuthenticationAttribute()
{
}
}
我想检查AuthenticateAsync函数中的post参数。
我试过
context.Request.Content.ReadAsStringAsync().Result;
但此字符串为空。我能够使用
读取查询参数context.Request.GetQueryNameValuePairs();
但无法找到获取帖子表单参数的方法。任何帮助表示赞赏。
答案 0 :(得分:5)
var reader = new StreamReader(HttpContext.Current.Request.InputStream);
var content = reader.ReadToEnd();
var jObj = (JObject)JsonConvert.DeserializeObject(content);
foreach (JToken token in jObj.Children())
{
if (token is JProperty)
{
var prop = token as JProperty;
if (prop.Name.Equals("skipExternal") && prop.Value.ToString().Equals("True"))
{
// Logic...
}
}
}
这是我使用的代码。我想检查天气参数skipExternal
是作为post参数中的True
发送的。
答案 1 :(得分:0)
我不熟悉context.Request.GetQueryNameValuePairs()
,但从名称来看,它听起来像会从查询字符串中提取参数。由于您正在执行POST
,因此查询字符串中没有参数(它们位于POST正文中)。
试试这个:
context.HttpContext.Request.Params["groupId"]
或者这个:
context.Controller.ValueProvider.GetValue("groupId").AttemptedValue
使用这些将取决于您如何实施模型和提供商。
答案 2 :(得分:0)
使用
context.ActionContext.ActionArguments
这会得到一个Dictionary<string, object>
,其中键是参数的名称,值是参数本身。
这假设action方法正在使用模型绑定将传入的POST值绑定到模型。