如果通过Header或请求主体传入额外/未知参数,我希望返回400。我使用Newtonsoft进行序列化。我已将MissingMemberHandling设置为MissingMemberHandling. Error。
我正在使用[FromHeader]和[FromBody]序列化API中的参数。如果我在requestBody中发送额外的参数,我会得到一个错误。但是,如果我在Header中传递额外的参数,额外的参数会被忽略。
在startup.cs中,我有
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.Add(new StringEnumConverter());
options.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
})
我的控制器API如下所示
public async Task<ActionResult<Response>> TestAPI([FromRoute][FromHeader] RequestHeader header, RequestBody body)
{..
}
public class RequestHeader
{
[FromHeader(Name = "x-sessionId")]
public string SessionId {get; set;}
}
public class RequestBody
{
[FromBody(Id= "id")]
public string Id{get;set;}
}
如果我在body中传递了id以外的任何东西,Newtonsoft确实会返回一个错误。如果我在header中传递了额外的参数,那些参数会被忽略。
为什么MissingMemberHandling不适用于头文件?另外,我如何检查头文件或查询中是否有额外的参数并返回错误?我正在寻找一个通用的解决方案,可以适用于我所有的API
1条答案
按热度按时间mzmfm0qo1#
如果你已经修复了“可接受的标题”,你可以创建一个CORS策略,它会为你做一些事情,如果发送了一些奇怪的标题,会向UI返回错误。你可以根据你的需要将它调整为非常严格或或或多或少宽松。
然后记得在
UseCors(policyName)
上调用它以激活策略。您也可以通过从appsettings.json文件中获取可接受的头来动态设置它们。