.net 处理httprequest中的未知参数

jmo0nnb3  于 2023-02-01  发布在  .NET
关注(0)|答案(1)|浏览(103)

如果通过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

mzmfm0qo

mzmfm0qo1#

如果你已经修复了“可接受的标题”,你可以创建一个CORS策略,它会为你做一些事情,如果发送了一些奇怪的标题,会向UI返回错误。你可以根据你的需要将它调整为非常严格或或或多或少宽松。

return services
            .AddCors(x => x
                .AddPolicy("YourPolicyName", policy => policy
                    .WithHeaders(new[] { "MyHeader" })
                    .WithExposedHeaders(new[] { "MyHeader" })));

然后记得在UseCors(policyName)上调用它以激活策略。
您也可以通过从appsettings.json文件中获取可接受的头来动态设置它们。

相关问题