我正在ASP.NET Core 2.2中实现基于策略的授权,但是我无法访问验证处理程序中的POST请求参数。
我尝试做这样的事情:
mvcContext.HttpContext.Request.Form["key"]
但是当我访问Request.Form时,给我这个错误:
'mvcContext.HttpContext.Request.Form' threw an exception of type 'System.InvalidOperationException'
我尝试在Request.QueryString中使用GET参数,并成功工作。
访问POST参数的正确方法是什么?我错过了一些配置吗?
答案 0 :(得分:0)
你可以得到这样的身体:
[HttpPost]
public string SampleMethod([FromBody] YourModel model)
{
//access to the model here
}
如果要访问上下文,则应在启动类中注册IHttpContextAccessor
services.AddScoped<IHttpContextAccessor, HttpContextAccessor>();
答案 1 :(得分:0)
根据您的屏幕截图,看来您想从请求json主体读取关键节点,如果是这样,则可以尝试将主体读取为json,然后获取节点值,如
if (context.Resource is AuthorizationFilterContext mvcContext)
{
var request = mvcContext.HttpContext.Request;
request.EnableRewind();
var reader = new StreamReader(request.Body);
string body = reader.ReadToEnd();
var model = JsonConvert.DeserializeObject(body, mvcContext.ActionDescriptor.Parameters.FirstOrDefault().ParameterType);
JToken key;
JObject.Parse(body).TryGetValue("key", StringComparison.InvariantCultureIgnoreCase, out key);
request.Body.Seek(0, SeekOrigin.Begin);
}