C# 替换415不支持的媒体类型状态代码

C# 替换415不支持的媒体类型状态代码,c#,asp.net-core,C#,Asp.net Core,我正在将一些代码移动到Web API中,我只希望接受完美的请求(按顺序发送数据、按顺序发送所有头等),并拒绝其他请求。现在我有了它,如果一个完美的请求进来,那么它返回一个正确的输出,带有一个200 OK状态代码,如果一个错误的请求进来(也就是一个未正确欺骗的请求),那么它返回一个404 not FOUND 我的控制器中的函数都有一个带有FromBody属性的参数,这意味着如果请求使用内容类型“application/json”,它可以正常工作,但是当一个请求包含另一个内容类型时,它会自动返回41

我正在将一些代码移动到Web API中,我只希望接受完美的请求(按顺序发送数据、按顺序发送所有头等),并拒绝其他请求。现在我有了它,如果一个完美的请求进来,那么它返回一个正确的输出,带有一个200 OK状态代码,如果一个错误的请求进来(也就是一个未正确欺骗的请求),那么它返回一个404 not FOUND


我的控制器中的函数都有一个带有FromBody属性的参数,这意味着如果请求使用内容类型“application/json”,它可以正常工作,但是当一个请求包含另一个内容类型时,它会自动返回415个不支持的媒体类型状态代码。我想要的是基本上“隐藏”我的所有端点,并且在请求完美时只返回404状态码以外的其他内容。因此,我想将返回的415不受支持的媒体类型状态代码更改为404状态代码。

您可以添加自定义中间件来实现这一点:

        app.Use(async (context, next) =>
        {
            await next.Invoke();

            if (context.Response.StatusCode == StatusCodes.Status415UnsupportedMediaType)
            {
                context.Response.StatusCode = StatusCodes.Status404NotFound;
                await context.Response.WriteAsync("404 not found");
            }
        });

确保在您的中间件管道中的适当位置配置它。

415表示服务器不理解该请求(如您在预期JSON时发送XML),将其转换为404没有多大意义-通过此更改,您绝对不会获得任何安全性-只有我的程序才允许发送有效请求,我预测人们将对我的应用程序进行反向工程,并尝试发送他们自己的请求。谢谢,这正是我想要的。