如何在.NET核心2.0服务中设置响应标头

时间:2018-05-31 18:12:07

标签: c# http-headers .net-core

我有一个dotnet core 2服务,我想在发送响应之前添加一个响应头,但我无法弄清楚如何这样做。标头的值将取决于请求,它对所有请求都不相同。我想添加的示例端点如下所示。

[HttpPost("MyEndpoint")]
public string MyEndpoint([FromBody][Required] RequestBody requestBody)
{
    string responseBody = DoStuff(requestBody);

    // How to set response header?

    return responseBody;
}

P.S。抱歉愚蠢的用户名,我急于创建帐户,但现在我无法将其更改为30(25以上)天。

3 个答案:

答案 0 :(得分:1)

试试这个:

[HttpPost("MyEndpoint")]
public string MyEndpoint([FromBody][Required] RequestBody requestBody)
{
    string responseBody = DoStuff(requestBody);

    // How to set response header?
    this.Response.Headers.Add("MyHeader", "MyHeaderValue");

    return responseBody;
}

答案 1 :(得分:0)

不幸的是我无法让上一个回复的解决方案起作用,因为this.Response似乎不存在,但我找到了一个有效的解决方案。

首先,在Startup.ConfigureServices(...)中添加以下内容:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

接下来,将HttpContext成员添加到服务控制器并将HttpContextAccessor注入服务控制器构造函数,如下所示:

private readonly HttpContext Context;

public MyServiceController(IHttpContextAccessor contextAccessor, ...)
{
    Context = contextAccessor.HttpContext;
}

最后,使用新的Context成员修改标头。原帖中方法的修改版本:

[HttpPost("MyEndpoint")]
public string MyEndpoint([FromBody][Required] RequestBody requestBody)
{
    string responseBody = DoStuff(requestBody);

    // Set response header
    Context.Response.Header.Add("HeaderKey", "HeaderValue");

    return responseBody;
}

答案 2 :(得分:0)

在.net核心中,这非常简单:

Response.Headers.Add("testkey", "testvalue");