C # ASP.NET में पूर्ण क्वेरी स्ट्रिंग प्राप्त करें


79

एक PHP प्रोग्रामर के रूप में मुझे HTTP क्वेरी स्ट्रिंग को पुनः प्राप्त करने के लिए $ _GET का उपयोग करने के लिए उपयोग किया जाता है ... और अगर मुझे पूरे स्ट्रिंग की आवश्यकता है, तो इसे करने के तरीकों का भार है।

एएसपी में, हालांकि, मैं प्रश्न प्राप्त करने के लिए प्रतीत नहीं कर सकता।

यहाँ news.aspx का कोड है (कुछ HTML में एम्बेड किया गया है):

<%                             
    string URL = "http://www.example.com/rendernews.php?"+Request.Querystring;
    System.Net.WebClient wc = new System.Net.WebClient();
    string data = wc.DownloadString(URL);
    Response.Output.Write(data);
%>

मैं एक दूरस्थ सर्वर से एक PHP स्क्रिप्ट के आउटपुट ला रहा हूं, और यह पूरी तरह से Request.Querystring के बिना काम करता है।

मुद्दा यह है कि मैं पहली पंक्ति पर पूर्ण क्वेरी स्ट्रिंग प्राप्त करने का प्रयास कर रहा हूं: Request.Querystring। मुझे एक त्रुटि मिल रही है " वस्तु संदर्भ वस्तु के उदाहरण के लिए सेट नहीं है " जो मूल रूप से अनुरोध करता है। Request.Querystring मौजूद नहीं है।

किसी भी विचार यहाँ समस्या क्या है? जब सूचकांक.aspx को http://test.com/news.aspx?id=2 कहा जाता है, तो मैं उस क्वेरी स्ट्रिंग को कैसे प्राप्त कर सकता हूं? मेरी स्क्रिप्ट http://www.example.com/rendernews.php?id=2


क्या यह हमेशा विफल रहता है, या किनारे के मामले हैं जैसे कोई चर नहीं परिभाषित किया गया है?
मैट

जवाबों:


191

Request.Url.Queryयदि आप एक स्ट्रिंग के रूप में कच्चे querystring चाहते हैं की कोशिश करो ।


16

यह आपके लिए ठीक काम करना चाहिए।

इस कोड Page_Loadको पेज की स्थिति में लिखें ।

string ID = Request.QueryString["id"].ToString();
Response.Redirect("http://www.example.com/rendernews.php?id=" + ID);

8

Request.QueryStringआपको क्वेरी स्ट्रिंग का प्रतिनिधित्व करने वाले कुंजी / मान जोड़े का एक संग्रह देता है। स्ट्रिंग नहीं है। हालांकि एक वस्तु संदर्भ त्रुटि का कारण होगा कि मत सोचो। आपके होने का कारण यह है कि जैसा कि मौरो ने टिप्पणियों में बताया है। यह QueryString है न कि Querystring।

प्रयत्न:

Request.QueryString.ToString();

या

<%                                 
    string URL = Request.Url.AbsoluteUri 
    System.Net.WebClient wc = new System.Net.WebClient();
    string data = wc.DownloadString(URL);
    Response.Output.Write(data);
%>

आपके कोड के समान है, लेकिन Request.Url.AbsoluteUriक्वेरी स्ट्रिंग सहित पूरा पथ वापस कर देगा।


इसके साथ मुझे यह मिलता है: "'System.Web.HttpRequest' में 'Querystring' के लिए कोई परिभाषा नहीं है और न ही कोई विस्तार विधि 'Querystring' में 'System.Web.HttpRequest" प्रकार का पहला तर्क स्वीकार किया गया है और जब मैं सिस्टम जोड़ने का प्रयास करता हूं। इसके पहले वेब, मुझे "प्रकार या नाम स्थान का नाम मिलता है 'अनुरोध' नामस्थान में मौजूद नहीं है 'System.Web' (क्या आप एक असेंबली याद कर रहे हैं?)"
एंटोनी कैरी

आप यह सुनिश्चित करना चाहते हैं कि आप कहीं अनुरोध को ओवरराइड नहीं कर रहे हैं। मेरे पास उत्पादन में Request.Querystring [.ToString ()] का उपयोग करने के लिए कुछ है और यह निर्दोष रूप से काम करता है।
मैट

2
यह नहीं है QueryString और नहीं Querystring? कोड ऊपर सी # की तरह दिखता है - केस संवेदनशीलता याद रखें
मौरो

1
मेरे मामले में, यह वही है जो मैं बचना चाहता हूं, क्योंकि ToString () .NET फ्रेमवर्क के **** पुराने संस्करण में छोटी गाड़ी है जिसे मैं उपयोग करने के लिए मजबूर हूं।
फ्लोरियन विंटर

1

बस Request.QueryString.ToString()इस तरह से पूरी क्वेरी स्ट्रिंग प्राप्त करने के लिए उपयोग करें:

string URL = "http://www.example.com/rendernews.php?"+Request.Querystring.ToString();

1
यह वर्ग का नाम देता है।
अल्लोव

1
@Allov मुझे लगता है कि परीक्षण किया है, और इसे सही ढंग से क्वेरी स्ट्रिंग लौटे था, और यहां तक कि .ToString () के बिना वास्तव में यह है जब एक तार के साथ श्रृंखलाबद्ध काम करेंगे
yoel halb

यह .Net 4 में काम नहीं आया। संभवतः यह वोट .Net के अन्य संस्करणों के लिए हैं।
फाबियो मिल्हीरो

1
यह वास्तव में बदल रहा है & amp; इसलिए यह अनुपयोगी है। Request.Url.Query बहुत बेहतर है।
जिनी हर्निक

0

मैंने आपके उदाहरण का परीक्षण किया है, और जब अनुरोध।

इसके उदाहरण में "+" ऑपरेटर का उपयोग करते हुए एक स्ट्रिंग के साथ समवर्ती करते समय यह सही परिणाम भी लौटाएगा (क्योंकि यह व्यवहार करता है जैसे कि .ToString () कहा जाता था)।

जैसे कि आपके कोड में कुछ भी गलत नहीं है, और मैं आपको सुझाव दूंगा कि आपका मुद्दा "QueryString" के बजाय "Querystring" लिखने वाले कोड में था।

और यह आपके त्रुटि संदेश के साथ और अधिक समझ में आता है क्योंकि यदि समस्या यह है कि QueryString एक संग्रह है और एक स्ट्रिंग नहीं है तो उसे एक और त्रुटि संदेश देना होगा।


-1

अभी कुछ समय पहले, मैं उसी मुद्दे को लेकर आया था। और मैं इसे निम्नलिखित तरीके से हल करता हूं।

Response.Redirect("../index.aspx?Name="+this.textName.Text+"&LastName="+this.textlName.Text);

इस के संदर्भ में


1
कभी भी किसी भी फ्रेमवर्क या प्रोग्रामिंग लैंग्वेज में कभी भी इस तरह के URL न बनाएं। URL बिल्डरों का उपयोग करें। वे आपके लिए एन्कोडिंग का ध्यान रखते हैं, जो ऊपर दिया गया कोड नहीं करता है।
फ्लोरियन विंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.