如何在AuthorizationHandler中获取POST请求参数

时间:2019-08-21 14:12:59

标签: c# asp.net-core .net-core

我正在ASP.NET Core 2.2中实现基于策略的授权,但是我无法访问验证处理程序中的POST请求参数。

我尝试做这样的事情:

mvcContext.HttpContext.Request.Form["key"]

但是当我访问Request.Form时,给我这个错误:

'mvcContext.HttpContext.Request.Form' threw an exception of type 'System.InvalidOperationException'

enter image description here 我尝试在Request.QueryString中使用GET参数,并成功工作。

访问POST参数的正确方法是什么?我错过了一些配置吗?

2 个答案:

答案 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);
}