如何在 ASP.NET MVC 操作中获取引荐来源网址?

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 操作中获取引荐来源网址?【英文标题】:How do I get the referrer URL in an ASP.NET MVC action? 【发布时间】:2010-12-01 01:37:47 【问题描述】:

我正在尝试在您调用操作之前重定向回页面。

【问题讨论】:

请记住,并非所有用户代理(AKA 浏览器)都会发送引荐来源网址信息,有些甚至可能伪造。 【参考方案1】:

如果您不喜欢直接访问Request.ServerVariables 字典,也可以使用Request.UrlReferrer 来获取引用URL。

【讨论】:

这正是我所需要的。谢谢你,兄弟! Request.UrlReferrer 实际上是 URI,但您可以从那里获得有关引荐来源网址的所有信息。 (有关 URI 与 URL 的更多信息:***.com/questions/176264/…)。【参考方案2】:
Request.ServerVariables["http_referer"]

应该这样做。

【讨论】:

【参考方案3】:

你可以用这个

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

【讨论】:

这可以在过滤器上下文中工作,但不能在问题所要求的操作上下文中工作。【参考方案4】:

你可以将referrer url传递给viewModel,在我看来这比通过状态分享更好,试试吧:

public interface IReferrer

    String Referrer  get; set; 

...

public static MvchtmlString HiddenForReferrer<TModel>(this HtmlHelper<TModel> htmlHelper) where TModel : IReferrer

    var str = htmlHelper.HiddenFor(hh => hh.Referrer);
    var referrer = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;
    return new MvcHtmlString(str.ToHtmlString().Replace("value=\"\"", String.Format("value=\"0\"", referrer)));

...

@Html.HiddenForReferrer()

【讨论】:

呵呵,从来没有意识到下划线本身就是一个有效的变量名。怎么样。 @BVernon 真正的问题是为什么有人会那样使用它。我所知道的唯一一个使用单个下划线作为名称的约定是表示它只是您不想要或不需要的变量的占位符。 @Daniel 我同意,已修复

以上是关于如何在 ASP.NET MVC 操作中获取引荐来源网址?的主要内容,如果未能解决你的问题,请参考以下文章

使用文件操作方法时如何在 ASP.NET MVC 中获取文件的 ContentType

ASP.NET MVC - 如何获取 URL 而不是操作链接?

如何在 playframework 中获取引荐来源网址

如何在 ASP.NET MVC 视图中返回当前操作?

如何在 ASP.NET MVC 的视图中调用多个操作?

PHP:如何获取引荐来源网址?