繁体   English   中英

HttpContext.Current.Request.UrlReferrer 始终为 null ASP.NET MVC

[英]HttpContext.Current.Request.UrlReferrer is always null ASP.NET MVC

UrlReferrer 在 Firfox 中始终为空

我想要做的是获取即将到来的请求的 URL

所以我想以这种方式将 Razor 视图中的 URL 传递到响应标头中的控制器

剃刀视图

@{ 
    string url = HttpContext.Current.Request.UrlReferrer.ToString();
    HttpContext.Current.Response.Headers.Add("CustomeUrl", url);
}

并在控制器中以这种方式获取听者值

控制器

public string SaveUploadedFile(HttpPostedFileBase fileBase)
{
    string url = HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString();
}

但不幸的是上面的代码不起作用,因为HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString(); 一片空白

请帮我将 URL 从视图传递到控制器

HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString()在您的控制器中始终为 null 的原因是因为您在视图中将标头添加到HttpContext.Current.Response并从HttpContext.Current.Request读取它HttpContext.Current.Request在您的控制器中。 由于视图和控制器都在服务器上执行并共享相同的请求/响应模型,因此您需要从编写它的同一位置读取它。

也就是说,因为视图和控制器都可以访问相同的请求/响应数据。 没有必要将 HTTP 上下文中已经存在的值传递给控制器​​,因为它已经有了它。 此外,如果 URL 格式错误(这可能发生,因为它通常不受您的直接控制), UrlReferrer属性将引发异常。 因此,您应该使用Request.Headers集合来检索它 因此,此行在您的控制器和视图中的工作方式相同。

string referrer = HttpContext.Request.Headers["Referer"];

旁注:您不应该在 MVC 中使用遗留的静态 HttpContext.Current 访问器,因为无法对其进行抽象(因此,如果您使用自定义或更改它的第 3 方组件,它可能与HttpContextBase可用的不同)。

如果在浏览器中单击超链接将您带到 MVC 应用程序的 URL,则 HTTP 引用器仅是非空的。

A页

托管在: http://example.com/page-a.html : 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 : 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 即可。

如果它为空,则可能有其他原因。

此外,UrlReferrer 是由浏览器发送的,因此将其添加到响应中毫无意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM