【问题标题】:HttpContext.Current.Request.UrlReferrer is always null ASP.NET MVCHttpContext.Current.Request.UrlReferrer 始终为空 ASP.NET MVC
【发布时间】:2017-10-29 23:35:35
【问题描述】:

在 Firfox 中,UrlReferrer 始终为空

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

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

剃刀视图

@{ 
    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 从 View 传递到 Controller

【问题讨论】:

标签: c# asp.net asp.net-mvc


【解决方案1】:

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

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

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

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

仅当在浏览器中单击超链接以将您带到 MVC 应用程序的 URL 时,HTTP referer 才为非空。

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 引用完全依赖于客户端以及客户端和服务器之间存在的任何防火墙。一些防火墙可以去除标头,因此应用程序不应该依赖它们来运行(或者至少有一个备用计划,以防标头不可用)。此信息通常应仅用于跟踪/调试目的。

【讨论】:

    【解决方案2】:

    您无需费心费力,只需在控制器上使用 Request.UrlReferrer。

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2012-05-31
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多