Как кодировать фрагменты URL

Я разрабатываю приложение ASP.NET MVC и управляю именами файлов в своих URL-путях. Мне нужно закодировать имена файлов URL, чтобы избежать ошибок на некоторых путях (например, когда используется символ «+», он не работает в Mono/XSP).

Но мне нужно закодировать только имена файлов, например:

Например, учитывая этот ввод:

/dir1/this has spaces/file+name.txt

Мне нужен следующий вывод:

/dir1/this%20has%20spaces/file%2bname.txt

Обратите внимание, что я не хочу кодировать разделитель пути. Любое предложение?

Заранее спасибо.


EDIT: я создаю свой URL, используя следующее:

   <%= Html.ActionLink(
            Html.Encode(revision.Name), 
            "Details", 
            "Items",
            Model.GetRouteParameters(revision.FullPath),
            null) %>

Где GetRouteParameters имеет следующее значение:

public object GetRouteParameters(string path)
{
    return new 
    {
        repository = ItemProvider.GetBrowsingObject().Repository, 
        path = path, 
        browsing = ItemProvider.GetBrowsingObject().Name
    };
}

Я хотел бы закодировать любой «опасный» символ в репозитории, пути или именах просмотра.


person Daniel Peñalba    schedule 05.05.2011    source источник
comment
Как вы создаете эти URL-адреса в первую очередь? Вот где они должны быть закодированы. Не впоследствии. Если вы получили недействительный URL, его будет сложнее исправить.   -  person Darin Dimitrov    schedule 05.05.2011
comment
@Darin: Спасибо за ответ, пожалуйста, посмотрите мои правки.   -  person Daniel Peñalba    schedule 05.05.2011


Ответы (1)


Вы можете использовать HttpUtility.UrlEncode для кодирования строк безопасным способом. Вам нужно URL-адрес кодировать отдельные компоненты пути, а затем создать путь.

person Dallas    schedule 21.11.2011