क्वेरिस्ट्रिंग के बिना url प्राप्त करें


189

मेरे पास इस तरह का एक URL है:

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

मैं पाना चाहता हूं http://www.example.com/mypage.aspx

क्या आप बता सकते हैं कि मैं इसे कैसे प्राप्त कर सकता हूं?

जवाबों:


129

आप उपयोग कर सकते हैं System.Uri

Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme, 
    Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);

या आप उपयोग कर सकते हैं substring

string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));

संपादित करें: टिप्पणियों में brillyfresh के सुझाव को प्रतिबिंबित करने के लिए पहला समाधान संशोधित करना।


6
url.AbsolutePath केवल URL (/mypage.aspx) का पथ भाग लौटाता है; prelend url.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) उस पूर्ण URL के लिए जिसे आप चाहते थे
Ryan

20
Uri.GetLeftPart विधि सरल है जैसा कि उल्लेख किया गया है stackoverflow.com/questions/1188096/…
एडवर्ड वाइल्ड

substringवहाँ अगर कोई क्वेरी स्ट्रिंग विधि त्रुटि दे देंगे। string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);इसके बजाय उपयोग करें ।
स्टॉकि

378

यहाँ एक सरल उपाय है:

var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);

यहां से उधार लिया गया: ट्रंकिंग क्वेरी स्ट्रिंग और रिटर्निंग क्लीन URL C # ASP.net


17
एक पंक्ति संस्करण:return Request.Url.GetLeftPart(UriPartial.Path);
jp2code

uri.GetComponent(उड़ी के भागों को प्राप्त करने की एक और भयानक विधि है। मैं अब तक इन दोनों के बारे में नहीं जानता था!
एरोनल्स

38

यह मेरा समाधान है:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);

35
Request.RawUrl.Split(new[] {'?'})[0];

2
मुझे यह केवल इस तथ्य के लिए पसंद है कि आप इसे पूर्ण यूरी के बिना उपयोग कर सकते हैं।
KingOfHypocrites

ध्यान रखें कि URL फिर से लिखने से पहले URL RawUrlमिलेगा , इसलिए शायद उपयोग करें ? AbsoluteUriRequest.Url.AbsoluteUri.Split('?')[0]
रक्षक एक


16

मरे तरीके:

new UriBuilder(url) { Query = string.Empty }.ToString()

या

new UriBuilder(url) { Query = string.Empty }.Uri

यह वही है जो मैं NET कोर 1.0 परियोजना के लिए उपयोग करता हूं क्योंकि इसमें कोई विधि नहीं है Uri.GetLeftPart। NET Core (1.1) के नवीनतम संस्करण में वह विधि होनी चाहिए (क्योंकि मैं अभी नेट नेट 1.1 पर नहीं हूं, इसकी पुष्टि करता हूं)
puselk

1
मुझे यह पसंद है क्योंकि URI का निर्माण करना वास्तव में UriBuilder के लिए है। अन्य सभी उत्तर (अच्छे) हैक हैं।
नाइन टेल्स

11

आप Request.Url.AbsolutePathपृष्ठ का नाम, और Request.Url.Authorityहोस्ट नाम और पोर्ट के लिए उपयोग कर सकते हैं । मेरा मानना ​​है कि वहाँ एक संपत्ति में बनाया गया है कि आप वास्तव में आप क्या चाहते हैं, लेकिन आप उन्हें अपने आप को जोड़ सकते हैं।


1
यह मुझे दे रहा है /mypage.aspx, वह नहीं जो मैं चाहता था।
रॉकी सिंह

4

विभाजन () भिन्नता

मैं केवल संदर्भ के लिए इस भिन्नता को जोड़ना चाहता हूं। उरल्स अक्सर तार होते हैं और इसलिए यह Split()विधि का उपयोग करने के लिए सरल है Uri.GetLeftPart()। और Split()रिश्तेदार, खाली और अशक्त मूल्यों के साथ काम करने के लिए भी बनाया जा सकता है, जबकि उरी एक अपवाद फेंकता है। इसके अतिरिक्त, Urls में एक हैश भी हो सकता है जैसे कि/report.pdf#page=10 (जो एक विशिष्ट पृष्ठ पर पीडीएफ खोलता है)।

निम्नलिखित विधि इन सभी प्रकार के Urls से संबंधित है:

   var path = (url ?? "").Split('?', '#')[0];

उदाहरण आउटपुट:


1
मैं बल्कि हैरान हूँ कि यह मेरे खुद तक किसी भी upvotes नहीं मिला है। यह एक बेहतरीन उपाय है।
jason

3

यहाँ @ कोलमैन के उत्तर का उपयोग करके एक विस्तार विधि दी गई है। GetLeftPart की तुलना में पथ () का उपयोग करना याद रखना थोड़ा आसान है। आप पथ को गेटपाथ में बदलना चाहते हैं, कम से कम जब तक वे C # में एक्सटेंशन गुण नहीं जोड़ते।

उपयोग:

Uri uri = new Uri("http://www.somewhere.com?param1=foo&param2=bar");
string path = uri.Path();

कक्षा:

using System;

namespace YourProject.Extensions
{
    public static class UriExtensions
    {
        public static string Path(this Uri uri)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }
            return uri.GetLeftPart(UriPartial.Path);
        }
    }
}



0

सिल्वरलाइट के लिए समाधान:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);

0

मैं एक साधारण विस्तार बनाया है, अगर वहाँ के QueryStringसाथ शुरू करने के लिए नहीं था, तो कुछ अन्य उत्तर शून्य अपवाद फेंक दिए थे:

public static string TrimQueryString(this string source)
{ 
    if (string.IsNullOrEmpty(source))
            return source;

    var hasQueryString = source.IndexOf('?') != -1;

    if (!hasQueryString)
        return source;

    var result = source.Substring(0, source.IndexOf('?'));

    return result;
}

उपयोग:

var url = Request.Url?.AbsoluteUri.TrimQueryString() 

0

System.Uri.GetComponents, आप चाहते हैं बस निर्दिष्ट घटक।

Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);

आउटपुट:

http://www.example.com/mypage.aspx

-1

सरल उदाहरण की तरह सबस्ट्रिंग का उपयोग किया जाएगा:

string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.