Asp.net mvc NewtonSoft JSON在使用MissingMemberHandling时未引发异常。错误
我们使用Newtonsoft Json转换器来反序列化API请求。由于我们不希望在后端接收不属于请求类的数据/成员,我们将Asp.net mvc NewtonSoft JSON在使用MissingMemberHandling时未引发异常。错误,asp.net-mvc,asp.net-core,exception,jsonconverter,Asp.net Mvc,Asp.net Core,Exception,Jsonconverter,我们使用Newtonsoft Json转换器来反序列化API请求。由于我们不希望在后端接收不属于请求类的数据/成员,我们将SerializerSettings.MissingMemberHandling设置为MissingMemberHandling.Error: services.AddControllers().AddNewtonsoftJson(a => { a.SerializerSettings.MissingMemberHandling = Missin
SerializerSettings.MissingMemberHandling
设置为MissingMemberHandling.Error
:
services.AddControllers().AddNewtonsoftJson(a =>
{
a.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
}
但我们没有收到异常,而是为API调用提供了一个“null”请求对象:
我们为什么不得到一个异常?我不知道您是如何配置Newtonsoft.Json的。我举了一个有效的例子。这是步骤
Microsoft.AspNetCore.Mvc.NewtonsoftJson
Startup.cs
中配置它
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddNewtonsoftJson(option=>
{
option.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
});
}
[ApiController]
[Route("[controller]")]
public class ValController:Controller
{
[AllowAnonymous]
[HttpPost]
public IActionResult LoginAsync([FromBody]Login login)
{
return Ok(login);
}
}
public class Login
{
public string comm { get; set; }
}
我发现了问题:我的控制器配置如下:
[Route("api/[controller]")]
public class MyController
{
}
由于在添加缺少的成员设置之前,一切都正常工作,因此我没有想到缺少的属性[ApiController]
。添加这一点,使该控制器在Json序列化方面与其他控制器类似
[Route("api/[controller]")]
[ApiController] // <- added this
public class MyController
{
}
[路由(“api/[控制器]”)]
[ApiController]//这是我已经做过的-但我对此进行了深入研究,似乎问题只出现在一个API控制器中。需要注意的是,API控件允许匿名API调用,而其他控件则不允许。但您的此处也允许匿名呼叫……是的,我添加了[ApiController]
。这是全部代码。谢谢你,卡尼。我对你的帖子投了更高的票,因为它提供了一个很好的完整源代码和完整功能的演示,演示了我正在使用的aspecting,但实际的问题在于缺少[ApicController]属性。因此,我将检查我自己的答案作为我问题的实际答案。