2012-07-17 44 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 2012-07-17 19:19:00

+0

如果URI包含元字符,查詢字符串或參數,您希望發生什麼;例如'HTTP://www.example.com/admin/users.aspx/deleteUser阿爾法=對於27%的β=%5F%39'? – 2012-07-17 19:28:25

+0

很好的問題,理想情況下,我會保留它們,只是刪除最後一段路徑。 – bflemi3 2012-07-17 20:35:46

回答

14

使用Uri類來分析URI - 您可以使用Segments屬性訪問所有分段,並重建沒有最後一個分段的URI。

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 `/` 

作爲替代獲取方案和主機名,由杜爾高拱壩在他的評論中建議:

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

+1 - 應該顯示代碼片段:) – EkoostikMartin 2012-07-17 19:21:55

+4

我建議'uri.GetComponents(UriComponents.SchemeAndServer,...)'而不是'uri.Scheme',因爲前者處理端口幷包含'://'。 – 2012-07-17 19:36:01

+1

...或者至少'uri.Authority'而不是'DnsSafeHost' – spender 2012-07-17 19:39:00

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 2013-12-16 13:09:03

+0

不能有查詢字符串中的/? – 2016-09-03 22:34:00

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

請讓答案更詳細,並注意,您的答案必須比現有答案更好(通過一些含義)。 – 2015-07-15 09:39:54

+0

我希望現在唯一可以理解的代碼是Victor Polevoy。 – Mentor 2015-07-16 09:20:39

+0

你的答案現在好多了。在將來避免僅有代碼的答案。 – 2015-07-16 09:22:20