2012-07-17 2 views
10

के अंतिम खंड निकालें मैं Request.Url के अंतिम खंड निकालना चाहते हैं, उदाहरण के लिए तो ...Request.Url

http://www.example.com/admin/users.aspx/deleteUser 

http://www.example.com/admin/users.aspx 

को बदल जाएगा मैं LINQ पसंद करते हैं लेकिन स्वीकार करेंगे कोई भी समाधान जो कुशलतापूर्वक काम करता है।

+3

आप linq का उपयोग करना चाहते हैं? क्यूं कर? – NicoSantangelo

+0

यदि यूआरआई में मेटाएक्टेक्टर, क्वेरी स्ट्रिंग या पैरामीटर शामिल हैं तो आप क्या करना चाहते हैं; जैसे 'Http: //www.example.com/admin/users.aspx/deleteUser अल्फा = के लिए% 27 बीटा =% 5F% 39'? –

+0

महान सवाल, आदर्श रूप से मैं उन्हें रखता हूं, बस पथ के अंतिम खंड को हटा देता हूं। – bflemi3

उत्तर

14

यूआरआई को पार्स करने के लिए Uri कक्षा का उपयोग करें - आप Segments संपत्ति का उपयोग करके सभी सेगमेंट तक पहुंच सकते हैं और अंतिम सेगमेंट के बिना यूआरआई का पुनर्निर्माण कर सकते हैं।

var uri = new Uri(myString); 

var noLastSegment = string.Format("{0}://{1}", uri.Scheme, uri.Authority); 

for(int i = 0; i < uri.Segments.Length - 1; i++) 
{ 
    noLastSegment += uri.Segments[i]; 
} 

noLastSegment = noLastSegment.Trim("/".ToCharArray()); // remove trailing `/` 

योजना और होस्ट नाम हो रही है के लिए एक विकल्प के रूप में, के रूप में उनकी टिप्पणी में Dour उच्च आर्क ने सुझाव दिया:

var noLastSegment = uri.GetComponents(UriComponents.SchemeAndServer, 
             UriFormat.SafeUnescaped); 
+0

+1 - हालांकि कोड स्निपेट दिखाना चाहिए :) – EkoostikMartin

+4

मैं सुझाव देता हूं कि 'uri.GetComponents (UriComponents.SchemeAndServer, ...) '' uri.Scheme' के बजाय, पूर्व हैंडल बंदरगाहों के रूप में और '// //' शामिल है। –

+1

... या कम से कम 'uri.Authority'' DnsSafeHost' – spender

1

खैर तुच्छ समाधान के अंत से चार से चार पुनरावृति होगी अपनी शुरुआत की ओर स्ट्रिंग और आने वाले पहले '/' की खोज (मुझे लगता है कि यह भी आपके दिमाग में आया)। के रूप में @ ओदेद का जवाब बहुत ही

string url = "http://www.example.com/admin/users.aspx/deleteUser"; 

for (int i = url.Length - 1; i >= 0; i--) { 

    if (url[i] == '/') return url.Substring(0, i - 1); 
} 
+1

बेहतर/क्लीनर 'String.LastIndexOf' का उपयोग करना है – Justin

+0

क्वेरी स्ट्रिंग में कोई/नहीं हो सका? –

9

, लेकिन बजाय एक UriBuilder का उपयोग कर:

इस प्रयास करें

var uri = new Uri("http://www.example.com/admin/users.aspx/deleteUser"); 
var newSegments = uri.Segments.Take(uri.Segments.Length - 1).ToArray(); 
newSegments[newSegments.Length-1] = 
    newSegments[newSegments.Length-1].TrimEnd('/'); 
var ub=new UriBuilder(uri); 
ub.Path=string.Concat(newSegments); 
//ub.Query=string.Empty; //maybe? 
var newUri=ub.Uri; 
1

Request.Url के अंतिम खंड को निकालने के लिए यह से घटाना करने के लिए पर्याप्त है अंतिम खंड की लंबाई uri पूर्ण लंबाई।

string uriWithoutLastSegment = Request.Url.AbsoluteUri.Remove(
    Request.Url.AbsoluteUri.Length - Request.Url.Segments.Last().Length); 
+1

कृपया उत्तर को और अधिक विस्तृत करें, और ध्यान दें कि मौजूदा उत्तर की तुलना में आपका उत्तर बेहतर होना चाहिए (कुछ अर्थों से)। –

+0

मुझे आशा है कि अब मेरे कोड की एकमात्र पंक्ति समझने योग्य और आप, विक्टर पोलेवॉय। – Mentor

+0

आपका उत्तर अब बेहतर है। भविष्य में कोड-केवल उत्तर से बचें। –

संबंधित मुद्दे