ASP.NET에서 HTTP 리퍼러 가져 오기


103

ASP.Net ( C # ) 에서 브라우저의 HTTP Referrer 를 가져 오는 빠르고 쉽고 안정적인 방법을 찾고 있습니다. 나는 HTTP 리퍼러 자체가 신뢰할 알고 있지만 나는 경우 리퍼러를 얻기의 신뢰할 수있는 방법할까요 이다 선물을.



답변:


166

현재 요청 의 UrlReferrer 속성을 사용할 수 있습니다 .

Request.UrlReferrer

클라이언트 (사용자 에이전트)가 제공하거나 제공하지 않을 수있는 요청에서 Referer HTTP 헤더를 읽습니다 .


8
리퍼러 HTTP 헤더가 잘못된 경우이 속성은 System.UriFormatException을 throw합니다.
NightOwl888 2014 년

1
@Darin Dimitrov 웹 API를 사용하여 REST API를 만들려고합니다. UrlReferrer는 Request 개체의 일부가 아닙니다. "사용"등을 추가해야합니다. 무엇을 놓치고 있습니까? DLL?
Ravi 2014

1
차이점은 철자가 정확하다는 점에 유의해야합니다. http 헤더의 철자가 틀립니다. MS는 속성 이름에 올바른 철자를 사용합니다. 불행히도 두 가지가 일치하지 않아 테스트 할 때 일부 사람들이 혼란을 일으킬 수 있습니다.

8
Request.UrlReferrer서버 측 포스트 백 후에 사용 하는 경우주의하십시오 . 물론 Request.UrlReferrer이제 다시 게시하는 페이지의 가치를 갖게됩니다. 대부분의 경우 사람들은 이전 페이지가 필요합니다. 이 경우 페이지가 처음로드 될 때 이전 페이지를 viewstate 변수로 저장하고 있는지 확인하십시오. 그리고이 변수에 액세스하면 이전 페이지가 나타납니다. 예를 들어, asp.net 양식 페이지로드 이벤트에서 다음을 수행 할 수 있습니다.if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
JonH

4
다시 예를 들어 게시 할 때 ... 그리고, 당신은 할 수 :Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
JonH

20

Request.UrlReferrer속성을 사용하십시오 .

장면 아래에서는 단지 ServerVariables("HTTP_REFERER")속성을 확인하는 것 입니다.


2
따라서 HttpContext.Current.Request.ServerVariables [ "HTTP_REFERER"]?
Chuck Le Butt

2
이론 상으로는 차이가 없습니다. 실제로는 리플렉터 쇼로 간단히 살펴보면 UrlReferrer간단한 호출보다 훨씬 더 많은 기능 을 수행하기 때문에 확실히 말할 수 없습니다ServerVariables("HTTP_REFERER")
Diadistis

13
나는 당신을 말할 수 ServerVariables["HTTP_REFERER"]반환 문자열 , 반면 Request.UrlReferrer리턴한다 우리당을 .
Chuck Le Butt

19
Request.Headers["Referer"]

설명

Request.UrlReferer속성은이 발생합니다 System.UriFormatException리퍼러 HTTP 헤더 형식이 잘못된 경우 (그것이 당신의 통제하에 일반적으로되지 않기 때문에 어떤 일이 일어날 수 있습니다.)

사용에 관해서 Request.ServerVariables는 MSDN에 따라 다음을 수행하십시오.

Request.ServerVariables 컬렉션

ServerVariables 컬렉션은 미리 결정된 환경 변수의 값과 요청 헤더 정보를 검색합니다.

Request.Headers 속성

HTTP 헤더 컬렉션을 가져옵니다.

Request.Headers는 헤더뿐만 아니라 모든 환경 변수를 포함하기 Request.ServerVariables때문에 보다 나은 선택 Request.ServerVariables입니다. 여기서는 헤더 Request.Headers만 포함하는 훨씬 더 짧은 목록입니다.

따라서 가장 좋은 해결책은 Request.Headers컬렉션을 사용 하여 값을 직접 읽는 것입니다. 그러나 양식에 표시하려는 경우 값을 인코딩하는 HTML에 대한 Microsoft의 경고에 유의하십시오.


2
있습니다 Referer헤더가 다르게 철자가 HTTP_REFERRER서버 변수.
Rudey

13

다음과 같이 : HttpRequest.UrlReferrer 속성

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();

2
null로부터 보호하기 위해 다음과 같이 말할 수 있습니다. string actual = ""+ Request.UrlReferrer ?? "(기본)"; // (기본값) 빈 문자열
Sheepy 2014

10

나는 .Net Core 2 mvc를 사용하고 있는데, 이것은 나를 위해 작동합니다 (미리보기 페이지를 얻기 위해) :

HttpContext.Request.Headers["Referer"];

9

Google은 C# Web API Referrer거래를 검색 할 때이 게시물로 이동하기 때문에를 포함하지 않는 일반 호출 Web API과 다른 유형을 사용합니다 . 정상적인 요청에는이 정보가 포함되어 있지 않으므로 실제로 필요한 경우 클라이언트가이를 포함하도록해야합니다. 이것을 귀하의 일부로 만들 수 있지만 더 나은 방법은를 사용하는 것 입니다.RequestMVC RequestHttpRequestMessageUrlReferrerWeb APIAPI ObjectHeaders

먼저 확장 HttpRequestMessage하여 UrlReferrer()메서드 를 제공 할 수 있습니다 .

public static string UrlReferrer(this HttpRequestMessage request)
{
    return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}

그런 다음 클라이언트가 설정해야 Referrer Header자신에게 API Request:

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);

이제 Web API Request에는 다음과 같이 액세스 할 수있는 리퍼러 데이터가 포함됩니다 Web API.

Request.UrlReferrer();

2
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();

1
이것은 ApiController입니다. 그래도 그게 내가 필요했던 것입니다.
Csaba Toth

2

언젠가는 이와 같은 모든 링크를 제공해야합니다

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

( "Current"가 발견되지 않은 경우 옵션)


0

다른 답장과 함께 null을 얻기위한 조건 절을 추가했습니다.

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.