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.