我无法从 MVC 控制器中的响应标头中获取值。我触发了 azure 函数 HTTP 并尝试将值传递给具有 302 重定向的响应标头“ClientIPADDR:MYCustomHeaders”。那么如何从 MVC 控制器的响应头中读取值呢?
Cache-Control:no-cache
ClientIPADDR:MYCustomHeaders
Content-Length:0
Date:Mon, 22 Jan 2018 14:03:09 GMT
Expires:-1
Location:http://example-read-response-header.azurewebsites.net/home/index
Pragma:no-cache
Server:Microsoft-IIS/10.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
var ipAddress=Request.Headers["ClientIPADDR"];
Request.ServerVariables.Get("ClientIPADDR");
尝试了这个但无法获得价值。
编辑:附加信息
这是一个 azure 函数,它将使用给定的 URL 进行 302 重定向,该 URL 将显示带有azure 函数代理的谷歌验证码页面的 HTML 页面
[FunctionName("TestFunction")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "testExample/{token}")]HttpRequestMessage req, string token, TraceWriter log)
{
string ipAddress = string.Empty;
if (req.Properties.ContainsKey("MS_HttpContext"))
{
ipAddress = ((HttpContextWrapper)req.Properties["MS_HttpContext"]).Request.UserHostAddress;
}
HttpResponseMessage errorResponse;
errorResponse = req.CreateResponse(HttpStatusCode.Found);
errorResponse.Headers.Add("ClientIPAddress", ipAddress);
errorResponse.Headers.Location = new Uri("http://localhost:62418/Home/Index" + "?code=" + token);
return errorResponse;
}
此函数显示一个验证码 HTML 页面,其中包含 azure 代理路由以形成操作属性,该属性将重定向到控制器操作方法我试图获取客户端 IP 地址,但它给了我 azure 应用服务 IP 地址。
<form name="ad" id="form1" action="/validate" method="post">
<main class="main-padding">
//google captcha html
</div>
</main>
</form>
不使用代理
<form name="ad" id="form1" action="http://example-read-response-header.azurewebsites.net/home/index" method="post">
<main class="main-padding">
//google captcha html
</div>
</main>
</form>
上面的 POST 方法给出了正确的 IP 地址。如果我不想在 HTML 中显示 azure 的网站 URL 并使用代理,则会给我 azure 应用服务 URL。我尝试在标头中传递客户端 IP 地址,但控制器操作方法没有获得该标头(请求。标头 [“ClientIPAddress”])。有没有其他方法可以获取客户端的 IP 地址?