मैं ASP.NET कोर एमवीसी में यूआरएल रेफरर कैसे प्राप्त कर सकता हूं?


99

मैं ASP.NET MVC को ASP.NET MVC वेबफॉर्म को माइग्रेट करने का प्रयास कर रहा हूं। वर्तमान में, मुझे Request.UrlReferrerकक्षा से परेशानी हो रही है ।

मूल पंक्ति है:

    [HttpPost]
    public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
    {
        var siteUrl = Request.UrlReferrer.ToString().ToLower();
        ....
    }

हालाँकि, ASP.NET Core के साथ, UrlReferrer उपलब्ध नहीं है। मैंने निम्नलिखित पाया है:

    Request.Headers["Referer"]

जो एक स्ट्रिंग के बजाय StringValues ​​देता है। मुझे यकीन नहीं है कि क्या मुझे इस एक का उपयोग करने की कोशिश करनी चाहिए या अगर इस स्थिति का कोई अन्य समाधान है। Request.ServerVariablesयह भी उपलब्ध नहीं है या शायद मेरे पास नाम स्थान नहीं है। मेरे नाम स्थान इस प्रकार हैं:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

मैं वास्तव में सराहना करूंगा यदि कोई मुझे सही दिशा में निर्देशित कर सकता है।


1
Google जैसी कुछ साइटें आपको सुरक्षा कारणों से रेफ़र नहीं देती हैं। Google की आँखों से: Google नहीं चाहता है कि आप खोज पाठ को देखें जो कि रेफ़र का एक हिस्सा होगा।
बेंजामिन एबट

FYI करें: URL रेफ़र विश्वसनीय नहीं है।
विन

जवाबों:


152

तुम लगभग वहां थे। StringValuesवर्ग सिर्फ एक प्रकार ASP.NET का उपयोग करता है कुशलतापूर्वक ढांचे में तार का प्रतिनिधित्व करने के लिए है। विशेष रूप से HttpContextवस्तु में। ToString()इसे स्ट्रिंग में बदलने के लिए आप इसे कॉल कर सकते हैं :

string referer = Request.Headers["Referer"].ToString();

1
क्या आप इसे करने का एक विश्वसनीय तरीका मानेंगे? क्या कोई वैकल्पिक तरीके हैं?
केमल टीज़र डिल्सिज़

4
यह क्लाइंट द्वारा भेजे जा रहे अनुरोध हेडर से संपत्ति तक पहुंचने के मामले में विश्वसनीय है। हालाँकि, मैं ग्राहक द्वारा भेजे जा रहे रेफ़र हेडर के मूल्य को विश्वसनीय नहीं मानूंगा क्योंकि यह स्वभाव से बहुत आसान है।
हेंक मोललेमा

69
उन लोगों के लिए जो जिज्ञासु हैं यदि रेफर एवर में गलत वर्तनी में है, यह नहीं है। हालांकि संदर्भ सही वर्तनी है, वे HTTP विनिर्देशन में गलत वर्तनी बनाया english.stackexchange.com/questions/42630/referer-or-referrer/...
फ्रैंक

1
आप HTTP हैंडलर और मॉड्यूल के एएसपी.नेट
एलेक्सगह

1
@FrankRem यह नहीं बताता है कि ऐ अहम् जिज्ञासु है, लेकिन यह बहुत मज़ेदार है। क्या जो अपराधी छूट गया, उसे बाहर निकाल दिया गया है?
माइकल ट्रेंचिडा


9

यहाँ बताया गया है कि मुझे url रेफ़र कैसे मिला: -

@{
string referer = Context.Request.Headers["Referer"].ToString();
Uri baseUri = new Uri(referer);}


<form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">

जैसा कि आपने उस उदाहरण में दिखाया है, संदर्भ को पृष्ठ में संदर्भ तक कैसे पहुंचें? मैंने कोड जोड़ दिया है लेकिन संदर्भ अपरिभाषित है।
जेडजिप

मैं इसे System.Web.Mvc के WebViewPage वर्ग से प्राप्त कर रहा हूँ
Intesar Alam

7
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;

var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();

मैजिक स्ट्रिंग के बिना स्वीकृत उत्तर के समान लगभग


लेकिन क्या Nugetपैकेज ( Microsoft.AspNetCore.Server.Kestrel) की आवश्यकता है ... यह भी काम करने के लिए परीक्षण किया गया है IISExpress? SSL? आदि।?
सर्ज सगन

1
@SerjSagan मेरे उत्पीड़न में कोड सुरक्षा के प्रकार (अन्य समाधानों के लिए जादू के तार के रूप में) के द्वारा प्रदान किए गए कोड को बड़े पैमाने पर अतिरिक्त नगेट से बाहर निकलता है, क्योंकि यह होस्टिंग के लिए सभी होस्टिंग मोड में काम करना चाहिए। SSL का परीक्षण नहीं किया गया था, लेकिन इससे कोई फर्क नहीं
पड़ना

0

यह काम करता है (.NET कोर 3.1 में परीक्षण):

Request.GetTypedHeaders().Referer

Requestदोनों की एक संपत्ति है , BaseControllerऔर HttpContextआप इसे या तो से प्राप्त कर सकते हैं।

उदाहरण के लिए, नियंत्रक क्रिया से संदर्भित पृष्ठ पर पुनर्निर्देशित करना, बस यह करें:

public IActionResult SomeAction()
{
    return Redirect(Request.GetTypedHeaders().Referer.ToString());
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.