如何在ApiController的方法中获取所有请求标头列表

时间:2019-09-03 04:23:46

标签: c# asp.net-web-api

我想从请求的API方法中获取所有请求标头及其值。 预期的输出字符串,如下所示:

*Cache-Control:no-cache,
Content-Type:application/json; charset=utf-8,
HEADER_1:HEADER_VAL_1,
HEADER_2:HEADER_VAL_2,
HEADER_3:HEADER_VAL_3*

我尝试了Request.Headers.toString()并尝试了该方法的格式输出;

//Code 
public class DEMOController : ApiController{

[HttpPost]
public string SaveSomeData(Object data)
{
string headersString = Request.Headers.toString();

}
}

2 个答案:

答案 0 :(得分:1)

$code

HTML输出:

Cache-Control: no-cache,
Connection: keep-alive,
Accept: */*,
Accept-Encoding: gzip, deflate,
Host: localhost:51161,
User-Agent: PostmanRuntime/7.16.3,
HEADER_1: HEADER_VAL_1,
HEADER_2: HEADER_VAL_2,
HEADER_3: HEADER_VAL_3

答案 1 :(得分:0)

我今天遇到了这个要求。我的解决方案略有不同,因为迪帕克的一些逻辑对我来说没有意义(但并不多......)。

我发现这种方法最能模拟 Postman 生成代码的方式。

var sb_debug = new StringBuilder();

foreach (var h in Request.Headers)
{
    if (h.Value != null)
    {
        var val = string.Join(",", h.Value); // Header value is IEnumerable<string>, not just a string value
        if (!string.IsNullOrWhiteSpace(val))
        {
            sb_debug.AppendLine($"{h.Key}: {val}");
        }
    }
}

Debug.WriteLine(sb_debug.ToString()); // Outputs all headers and values

请注意,这里没有逗号分隔符,因为它们不用于请求。