如何在 ASP.NET 请求中使用 System.Net.HttpRequestHeader 枚举?

cro*_*sek 5 asp.net http-headers c#-4.0

在 WCF (System.Net.WebHeaderCollection) 中,可以使用 System.Net.HttpRequestHeader 枚举或标头字符串检索标头值:

WebOperationContext.Current.IncomingRequest.Headers[httpRequestHeaderEnum] 
// or
WebOperationContext.Current.IncomingRequest.Headers.Get(rawHeaderString)
Run Code Online (Sandbox Code Playgroud)

但在 ASP.NET 中,标头位于仅接受标头字符串的 NameValueCollection 中:

 HttpContext.Current.Request.Headers[rawHeaderString]
Run Code Online (Sandbox Code Playgroud)

为了将枚举用于 ASP.NET,从枚举 System.Net.HttpRequestHeader 到其标头字符串的映射在哪里?

小智 0

编写一个映射方法怎么样?供参考: HttpRequestHeader 枚举

您可以只制作一个映射表,或者使用从Binary Worrier 的帖子中获取的代码,您可以执行以下操作:

public static string TranslateToHttpHeaderName(HttpRequestHeader enumToTranslate)
{
    const string httpHeaderNameSeparator = "-";
    string enumName = enumToTranslate.ToString();
    var stringBuilder = new StringBuilder();

    // skip first letter
    stringBuilder.Append(enumName[0]);
    for (int i = 1; i < enumName.Length; i++)
    {
        if (char.IsUpper(enumName[i])) stringBuilder.Append(httpHeaderNameSeparator);
        stringBuilder.Append(enumName[i]);
    }
    // Cover special case for 2 character enum name "Te" to "TE" header case.
    string headerName = stringBuilder.ToString();
    if (headerName.Length == 2) headerName = headerName.ToUpper();
    return headerName;
}
Run Code Online (Sandbox Code Playgroud)