Подтвердить что ты не робот

Как я могу получить каталог из Uri

Например, если у меня есть

http://www.example.com/mydirectory/myfile.aspx

Как я могу получить

http://www.example.com/mydirectory

Я ищу вызов функции .NET.

4b9b3361

Ответ 1

Нет свойства, но его не слишком сложно разобрать:

Uri uri = new Uri("http://www.example.com/mydirectory/myfile.aspx");
string[] parts = uri.LocalPath.Split('/');
if(parts.Length >= parts.Length - 2){
     string directoryName = parts[parts.Length - 2];
}

Ответ 2

Попробуйте это (без манипуляции с строкой):

Uri baseAddress = new Uri("http://www.example.com/mydirectory/myfile.aspx?id=1");
Uri directory = new Uri(baseAddress, "."); // "." == current dir, like MS-DOS
Console.WriteLine(directory.OriginalString);

Ответ 3

Вот довольно чистый способ сделать это. Также имеет преимущество при использовании любого URL-адреса, который вы можете наложить на него:

var uri = new Uri("http://www.example.com/mydirectory/myfile.aspx?test=1");
var newUri = new Uri(uri, System.IO.Path.GetDirectoryName(uri.AbsolutePath));

ПРИМЕЧАНИЕ: удаленный метод Dump(). (Это из LINQPad, где я это проверял!)

Ответ 4

Как насчет простой обработки строк?

public static Uri GetDirectory(Uri input) {
    string path = input.GetLeftPart(UriPartial.Path);
    return new Uri(path.Substring(0, path.LastIndexOf('/')));
}

// ...
newUri = GetDirectory(new Uri ("http://www.example.com/mydirectory/myfile.aspx"));
// newUri is now 'http://www.example.com/mydirectory'

Ответ 5

Если вы уверены, что имя файла находится в конце URL-адреса, будет работать следующий код.

using System;
using System.IO;

Uri u = new Uri(@"http://www.example.com/mydirectory/myfile.aspx?v=1&t=2");

//Ensure trailing querystring, hash, etc are removed
string strUrlCleaned = u.GetLeftPart(UriPartial.Path); 
// Get only filename
string strFilenamePart = Path.GetFileName(strUrlCleaned); 
// Strip filename off end of the cleaned URL including trailing slash.
string strUrlPath = strUrlCleaned.Substring(0, strUrlCleaned.Length-strFilenamePart.Length-1);

MessageBox.Show(strUrlPath); 
// shows: http://www.example.com/mydirectory

Я добавил некоторый барахл в строку запроса URL-адреса, чтобы доказать, что он все еще работает при добавлении параметров.