Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我的标题中根本没有内容类型,那么ASP.NET核心Web API管道的流程是什么?_C#_Asp.net Mvc_Api_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# 如果我的标题中根本没有内容类型,那么ASP.NET核心Web API管道的流程是什么?

C# 如果我的标题中根本没有内容类型,那么ASP.NET核心Web API管道的流程是什么?,c#,asp.net-mvc,api,asp.net-core,asp.net-web-api,C#,Asp.net Mvc,Api,Asp.net Core,Asp.net Web Api,我试图解决这个问题,如果一个客户端在到达我的控制器之前标题中没有内容类型,我想显示我自己的错误消息。不是[ApiController]通用问题详细信息消息,而是我自己的JSON对象。我一直在努力解决这个问题,至少我知道在我的控制器上使用[ApiController]属性可以为我提供4XX错误代码的问题详细信息响应。我删除了这个,现在我有了空的响应体。我希望相同的状态代码只是与响应不同的主体/对象。最好的方法是什么?我想知道流程,这样我就可以提前捕获这个错误,并用我自己的JSON对象返回我的响应您

我试图解决这个问题,如果一个客户端在到达我的控制器之前标题中没有内容类型,我想显示我自己的错误消息。不是[ApiController]通用问题详细信息消息,而是我自己的JSON对象。我一直在努力解决这个问题,至少我知道在我的控制器上使用[ApiController]属性可以为我提供4XX错误代码的问题详细信息响应。我删除了这个,现在我有了空的响应体。我希望相同的状态代码只是与响应不同的主体/对象。最好的方法是什么?我想知道流程,这样我就可以提前捕获这个错误,并用我自己的JSON对象返回我的响应

您可以使用中间件解决这个问题。下面是一个示例中间件类,您可以创建并连接到HTTP管道

public class InterceptContentType
{
    private RequestDelegate _next;

    public InterceptContentType(RequestDelegate next)
    {
        this._next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // This is where you can intercept the content type as shown below
        // and perform what you need
        context.Request.Headers[HeaderNames.ContentType] = "application/xml";
        await _next.Invoke(context);
    }
}
将此类连接到HTTP管道非常简单,只需将下面的语句添加到Startup.cs类中的Configure()方法

app.UseMiddleware<InterceptContentType>();
app.UseMiddleware();

可能是在Mvc之前运行的?嘿,谢谢你的回答。。我刚才看到这个。我使用app.UseStatusCodesPages中间件解决了这个问题,但是我会尝试这个方法,非常感谢您的响应。我很感激。