添加多个允许标头只会在http响应中添加最后一个标头

时间:2017-06-22 14:53:53

标签: asp.net-core

我正在尝试在aspnetcore v1.1.2中向HttpResponse添加多个Allow Headers。当我运行下面的代码时,标题会被添加到HttpResponse上的IHeaderDictionary中,但是当序列化时,集合中只有最后一个标题(在本例中为“POST”)实际上被添加到http响应中。有没有其他人经历过这个,或者我做错了什么?

这是我正在使用的代码。

public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
        context.HttpContext.Response.Headers.Add("Allow", new StringValues(new [] {"GET", "POST"}));

        await next();
}

我在ResultFilterAttribute中执行此操作。

非常感谢...

2 个答案:

答案 0 :(得分:0)

这应解决问题:

context.HttpContext.Response.Headers.Add("Allow", "GET, POST");

答案 1 :(得分:0)

您的代码很好,您可能需要更改的唯一地方是您的响应解析逻辑。仔细检查您的回复 - 它包含2个Allow标题,而不是包含2个值的标题:

Allow: GET
Allow: POST

简单示例: 让我们说你有下一个控制器动作:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    [AddHeader]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

使用curl获取请求:

curl -X GET http://localhost:5000/api/values -i

响应:

HTTP/1.1 200 OK
Date: Fri, 23 Jun 2017 22:23:24 GMT
Content-Type: application/json; charset=utf-8
Server: Kestrel
Transfer-Encoding: chunked
Allow: GET
Allow: POST

["value1","value2"]