Каков наилучший способ объединить части URL-адреса, который учитывает несколько или отсутствует "/"? - PullRequest
0 голосов
/ 27 декабря 2011

Я взял на себя проект, в котором много кода, объединяющего строки для составления URL. Я пытаюсь вспомнить, возвращает ли каждый из этих API "/" в конце базового URL (либо "http://www.mysite.com", либо" http://www.mysite.com/")

Например:

var baseUrl = "http://www.mySite.com/";
var controllerAndAction = "/Mycontroller/MyAction";

var fullUrl = baseUrl + controllerAndAction;

или

var baseUrl = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
var controllerAndAction = "Mycontroller/MyAction";

var fullUrl = baseUrl + controllerAndAction;

или

var baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
var controllerAndAction = "Mycontroller/MyAction";

var fullUrl = baseUrl + controllerAndAction;

или

var baseUrl = "http://www.mySite.com";
var controllerAndAction = "/Mycontroller/MyAction";

var fullUrl = baseUrl + controllerAndAction;

(обратите внимание на "/" в конце baseUrl и в начале контроллера AndAction)

Я пытаюсь найти самый чистый способ убедиться, что они создают правильные URL-адреса, которые включают один "/" (не 2 или 0)

Есть ли что-нибудь, что я могу сделать, чтобы подтвердить это (кроме ручного тестирования каждого из них.)?

Примечание:

мне нужен этот код для работы в asp.net-mvc и проекте winforms, поэтому я стараюсь избегать кода, который связан с любым из них (чтобы избежать ссылки на ненужные библиотеки)

Ответы [ 4 ]

2 голосов
/ 27 декабря 2011

Это не весело. Проверьте Path.Combine для URL . Этот метод должен позволять вам комбинировать базовые URL, пути и строки запроса.

Примечание: ссылка предлагает использовать URI, который является базовым классом системы, доступным в любом типе проекта C # / VB.

0 голосов
/ 27 декабря 2011

Ничего из вышеперечисленного.Зачем объединять строки, когда фреймворк уже предоставляет вам метод , который выполняет эту работу?Вы даже пометили свой вопрос string-concatenation, но это неправильно для того, что вы пытаетесь сделать.

Чтобы создать абсолютный URL в приложении ASP.NET MVC, который учитывает ваши маршруты, онпросто как:

public ActionResult Foo()
{
    var fullUrl = Url.Action("MyAction", "MyController", null, Request.Url.Scheme);
    ...
}

Вы никогда не должны использовать конкатенации строк и жесткое кодирование при работе с URL.Всегда используйте помощники URL при работе с URL в приложении ASP.NET MVC.

0 голосов
/ 27 декабря 2011

Предположим, что все входы верны (все имеют только 0 или 1 /).Я думаю, что вам нужно 2, если / иначе, чтобы убедиться, что:

  1. Конец baseURL имеет /
  2. В начале controllerAndAction нет /
0 голосов
/ 27 декабря 2011

Я использую Path.Combine. Не уверен на 100%, что он справится с отсутствующим регистром '/', вам придется попробовать его один раз.

...