在ASP.NET MVC操作中如何获取引荐URL?

93
我应该如何在ASP.NET MVC操作中获取引荐网址?我正在尝试重定向回调用操作之前的页面。

5
请记住,并非所有用户代理(也称为浏览器)都会发送引荐信息,有些甚至可能伪造它。 - belugabob
4个回答

155

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


这正是我所需要的。谢谢,兄弟! - NoWar
Request.UrlReferrer 实际上是 URI,但你可以从中获取有关引荐网址的所有信息。 (有关 URI vs URL 的更多信息:https://dev59.com/a3VC5IYBdhLWcg3w0EoD)。 - Miguel

20
Request.ServerVariables["http_referer"]

应该这样做。


9
您可以使用这个。
filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

2
这在筛选上下文中可以工作,但不适用于操作上下文,就像问题所要求的那样。 - Jace Rhea

4
你可以将引荐网址传递给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()

1
哎呀,从来没有意识到下划线本身也是一个有效的变量名。这还真是个新鲜事儿。 - BVernon
1
@BVernon 真正的问题是为什么有人会那样使用它。我所知道的唯一使用单个下划线作为名称的约定是表示它只是一个占位符,用于不需要或不想要的变量。 - Daniel
@Daniel 我同意,已修复。 - Andrey Burykin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接