HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString()
在您的控制器中始终为空的原因是您将控制器中的标题添加到您的视图中的HttpContext.Current.Response
并从HttpContext.Current.Request
中读取。同样,由于视图和控制器都在服务器上执行并共享相同的请求/响应模型,因此您需要从您编写它的同一位置读取它。
这就是说,因为View和Controller都可以访问相同的Request/Response数据。不需要将HTTP上下文中已存在的值传递给控制器,因为它已经拥有它。另外,如果URL格式不正确(这可能发生,因为它通常不受您的直接控制),则UrlReferrer
属性将引发异常。因此,您应该use the Request.Headers
collection to retrieve it。因此,这条线在您的控制器和视图中将起到相同的作用。
string referrer = HttpContext.Request.Headers["Referer"];
侧面说明:因为没有办法将它抽象(因此它可能是从什么HttpContextBase
如果可用不同的,则不应使用MVC中的传统静态的HttpContext.Current访问您正在使用改变它的自定义或第三方组件)。
如果在浏览器中点击一个超链接,HTTP引用程序仅为非null,该超链接会将您引导至MVC应用程序的URL。
网页A
托管于:http://example.com/page-a.html
<html>
<head></head>
<body>
<a href="http://example2.com/page-b">click me</a>
</body>
网页B(MVC)
托管于:http://example2.com/page-b
var referrer = HttpContext.Request.Headers["Referer"];
// referrer value is http://example.com/page-a.html if the above
// hyperlink is clicked on page-a.html. If the user types the
// new URL in the browser instead of clicking the hyperlink,
// HTTP referer will usually be null, depending on the browser implementation.
注意: HTTP引用者完全依赖于客户端和客户端与服务器之间存在的任何防火墙。某些防火墙可以将标题除去,以便应用程序不应该依赖它们来运行(或者至少在头部不可用时有一个后备计划)。这些信息通常只能用于跟踪/调试目的。
[Request.UrlReferrer null?]的可能重复(https://stackoverflow.com/questions/149130/request-urlreferrer-null) – hardkoded