ASP.NET MVC 작업에서 리퍼러 URL을 얻으려면 어떻게합니까?


88

ASP.NET MVC 작업에서 리퍼러 URL을 얻으려면 어떻게합니까? 조치를 취하기 전에 페이지로 다시 리디렉션하려고합니다.


5
모든 사용자 에이전트 (AKA 브라우저)가 리퍼러 정보를 보내는 것은 아니며 일부는 가짜 정보를 보낼 수도 있습니다.
belugabob

답변:


148

사전에 직접 Request.UrlReferrer액세스하는 것을 좋아하지 않는 경우에도 참조 URL을 가져올 수 있습니다 Request.ServerVariables.


정확히 내가 필요한 것입니다. 고마워 형제여!
DmitryBoyko

Request.UrlReferrer실제로 URI이지만 거기에서 리퍼러 URL과 관련하여 필요한 모든 것을 얻을 수 있습니다. (URI 대 URL에 대한 추가 정보 : stackoverflow.com/questions/176264/… ).
Miguel


8

이것을 사용할 수 있습니다

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

2
이것은 필터 컨텍스트에서 작동하지만 질문이 요청한 작업 컨텍스트에서는 작동하지 않습니다.
Jace Rhea

3

참조 자 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()

1
허, 밑줄 자체가 유효한 변수 이름이라는 것을 결코 깨닫지 못했습니다. 어때요?
BVernon

@BVernon 진짜 질문은 왜 누군가가 그것을 그렇게 사용하는지입니다. 내가 아는 유일한 규칙은 이름에 대한 단일 밑줄로 원치 않거나 필요하지 않은 변수에 대한 자리 표시 자임을 나타내는 것입니다.
Daniel

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.