Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 尝试访问自定义筛选器中的post数据时出现InvalidOperationException_Asp.net_Asp.net Core - Fatal编程技术网

Asp.net 尝试访问自定义筛选器中的post数据时出现InvalidOperationException

Asp.net 尝试访问自定义筛选器中的post数据时出现InvalidOperationException,asp.net,asp.net-core,Asp.net,Asp.net Core,我正在开发asp.net核心web应用程序。当我尝试在自定义筛选器中访问post数据时,如下所示: public class CustomFilter : Attribute, IAsyncActionFilter { private ActionExecutingContext _context; public async Task OnActionExecutionAsync(ActionExecutingContext context, Acti

我正在开发asp.net核心web应用程序。当我尝试在自定义筛选器中访问post数据时,如下所示:

public class CustomFilter : Attribute, IAsyncActionFilter
    {

        private ActionExecutingContext _context;

        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            _context = context;

            var dict = _context.HttpContext.Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString()); // got error her

            //int id = dict[“id”];
...
我得到了这个例外

InvalidOperationException:不正确的内容类型:application/json

我使用XMLHttpRequest将数据发送到服务器。以下是配置:

var xhr = new XMLHttpRequest();

xhr.open(“post”, url, true);

xhr.setRequestHeader('Content-Type', 'application/jso

xhr.send(JSON.stringify(dataToSent));
如果您发布的application/json正文中包含有效的json,则不能将其视为表单数据,而表单数据通常是application/x-www-form-urlencoded。读取原始正文并将其反序列化:

public class CustomFilter : Attribute, IAsyncActionFilter
{
    public async Task OnActionExecutionAsync(ActionExecutingContext context,
        ActionExecutionDelegate next)
    {
        var stream = context.HttpContext.Request.Body;

        string json = new StreamReader(stream).ReadToEnd();

        //Foo obj = JsonConvert.DeserializeObject<Foo>();
    }
}

谢谢你的帮助。我尝试过这段代码,但StreamReaderstream.ReadToEnd返回空字符串。@Angy,通常表示正文为空或缺少所需的标题=您能检查您的POST请求吗?应设置内容类型和内容长度标题。您可以使用来确保。我使用调试器在context.HttpContext.Request中检查了content类型和内容长度,内容类型为application/json,内容长度为:135@Angy是否可以访问控制器中的主体?例如,使用[FromBody]字符串值操作参数。您是否找到解决方案?我也犯了同样的错误