Asp.net 尝试访问自定义筛选器中的post数据时出现InvalidOperationException
我正在开发asp.net核心web应用程序。当我尝试在自定义筛选器中访问post数据时,如下所示: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
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]字符串值操作参数。您是否找到解决方案?我也犯了同样的错误