ASP.NET में HTTP रेफरर प्राप्त करना


103

मैं ASP.Net ( C # ) में ब्राउज़र का HTTP रेफ़रर प्राप्त करने का एक त्वरित, आसान और विश्वसनीय तरीका ढूंढ रहा हूं । मैं जानता हूँ कि HTTP संदर्भ में ही अविश्वसनीय है, लेकिन मैं रेफरर हो रही है, तो इसके बारे में एक विश्वसनीय तरीका चाहते हैं है वर्तमान।



जवाबों:


166

आप वर्तमान अनुरोध की UrlReferrer संपत्ति का उपयोग कर सकते हैं :

Request.UrlReferrer

यह रिफ़रर HTTP हेडर को उस अनुरोध से पढ़ेगा जो क्लाइंट (उपयोगकर्ता एजेंट) द्वारा आपूर्ति की जा सकती है या नहीं।


8
यह ध्यान दिया जाना चाहिए कि यह संपत्ति एक System.UriFormatException को फेंक देगी यदि रेफ़र HTTP हेडर विकृत है।
NightOwl888

1
@ डारिन दिमित्रोव एमईबी एपीआई का उपयोग करके एक रीस्ट एपीआई बनाने की कोशिश कर रहा है। UrlReferrer अनुरोध ऑब्जेक्ट का हिस्सा नहीं है। क्या मुझे कुछ "उपयोग करना" जोड़ना चाहिए आदि क्या मैं याद कर रहा हूं? एक DLL
रवि

1
यह ध्यान दिया जाना चाहिए कि अंतर वर्तनी सही है। Http हैडर गलत वर्तनी है। एमएस संपत्ति के नाम में सही वर्तनी का उपयोग करता है। दुर्भाग्य से, दोनों मेल नहीं खाते हैं, जो परीक्षण करते समय कुछ लोगों (मुझे) भ्रम पैदा कर सकता है।
जॉन

8
यदि आप Request.UrlReferrerसर्वर साइड पोस्टबैक के बाद उपयोग कर रहे हैं तो सावधान रहें । बेशक Request.UrlReferrerअब उस पृष्ठ का मूल्य होगा जिसे आप वापस पोस्ट कर रहे हैं। ज्यादातर मामलों में, लोगों को पिछले पृष्ठ की आवश्यकता होती है। इस मामले में, सुनिश्चित करें कि जब आप पृष्ठ को पहले लोड करते हैं, तो आप पिछले पृष्ठ को स्टोरेज चर कह रहे हैं। और फिर जब आप इस चर का उपयोग करते हैं तो इसका पिछला पृष्ठ आपके पास आता है। उदाहरण के लिए, asp.net में पृष्ठ लोड घटना आप कर सकते हैं:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
जॉन

4
... और जब आप उदाहरण के लिए वापस पोस्ट करते हैं, तो आप कर सकते हैं:Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
जॉन 16

20

Request.UrlReferrerसंपत्ति का उपयोग करें ।

दृश्यों के नीचे यह सिर्फ ServerVariables("HTTP_REFERER")संपत्ति की जाँच कर रहा है।


2
अगर मैं इस्तेमाल करता तो कोई अलग नहीं होता: HttpContext.Current.Request.ServerVariables ["HTTP_REFERER"]?
चक ले बट

2
सिद्धांत में कोई अंतर नहीं है, व्यवहार में मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि रिफ्लेक्टर के साथ एक त्वरित नज़र से पता चलता है कि UrlReferrerएक साधारण कॉल की तुलना में बहुत अधिक हैServerVariables("HTTP_REFERER")
डायडिस्टिस

13
मैं आपको बता सकता हूं कि ServerVariables["HTTP_REFERER"]एक स्ट्रिंग लौटाता है , जबकि Request.UrlReferrerएक उड़ी लौटता है ।
चक ले बट

19
Request.Headers["Referer"]

व्याख्या

Request.UrlRefererसंपत्ति एक फेंक होगा System.UriFormatExceptionयदि संदर्भित HTTP हेडर विकृत है (जो भी हो सकता है, क्योंकि यह आम तौर पर आपके नियंत्रण में नहीं है)।

Request.ServerVariablesMSDN के अनुसार उपयोग करने के लिए :

Request.ServerVariables संग्रह

ServerVariables संग्रह पूर्वनिर्धारित परिवेश चर के मानों को पुनः प्राप्त करता है और शीर्ष लेख की जानकारी का अनुरोध करता है।

अनुरोध

HTTP हेडर का एक संग्रह हो जाता है।

Request.Headersएक बेहतर विकल्प है Request.ServerVariables, क्योंकि Request.ServerVariablesइसमें सभी पर्यावरण चर और हेडर शामिल हैं, जहां Request.Headersएक बहुत छोटी सूची है जिसमें केवल हेडर शामिल हैं।

तो सबसे अच्छा उपाय है Request.Headersकि मूल्य को सीधे पढ़ने के लिए संग्रह का उपयोग करें । HTML के बारे में Microsoft की चेतावनियों को ध्यान में रखें यदि आप इसे एक फॉर्म पर प्रदर्शित करने जा रहे हैं, तो मान को एन्कोडिंग करें।


2
ध्यान दें कि Refererहेडर को HTTP_REFERRERसर्वर वेरिएबल की तुलना में अलग तरीके से लिखा गया है।
रुडी

13

इस तरह: HttpRequest.UrlReferrer संपत्ति

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

2
नल के खिलाफ की रक्षा करने के लिए, आप कह सकते हैं: स्ट्रिंग वास्तविक = "" + Request.UrlReferrer ?? "(चूक)"; // (डिफ़ॉल्ट) खाली स्ट्रिंग हो सकता है
भेड़ का बच्चा

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

कुछ समय के लिए आपको इस तरह से सभी लिंक देने होंगे

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

(विकल्प में जब "वर्तमान" स्थापित नहीं है)


0

अन्य उत्तर से संबंधित, मैंने अशक्त होने के लिए शर्त खंड जोड़ा है।

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.