Как удалить номер порта из строки URL
У меня есть следующий фрагмент кода:
string tmp = String.Format("<SCRIPT FOR='window' EVENT='onload' LANGUAGE='JavaScript'>javascript:window.open('{0}');</SCRIPT>", url);
ClientScript.RegisterClientScriptBlock(this.GetType(), "NewWindow", tmp);
URL, сгенерированный этим кодом, включает номер порта, и я думаю, что это происходит, потому что порт 80 используется веб-сайтом, и в этом коде я пытаюсь загрузить страницу из виртуального каталога веб-сайта. Любые идеи о том, как подавить номер порта в строке URL, сгенерированной этим кодом?
Ответы
Ответ 1
Используйте метод Uri.GetComponents
. Чтобы удалить компонент порта, вам нужно будет объединить все остальные компоненты, например:
var uri = new Uri( "http://www.example.com:80/dir/?query=test" );
var clean = uri.GetComponents( UriComponents.Scheme |
UriComponents.Host |
UriComponents.PathAndQuery,
UriFormat.UriEscaped );
EDIT: я нашел лучший способ:
var clean = uri.GetComponents( UriComponents.AbsoluteUri & ~UriComponents.Port,
UriFormat.UriEscaped );
UriComponents.AbsoluteUri
сохраняет все компоненты, поэтому & ~UriComponents.Port
будет исключать только порт.
Ответ 2
UriBuilder u1 = new UriBuilder( "http://www.example.com:80/dir/?query=test" );
u1.Port = -1;
string clean = u1.Uri.ToString();
Настройка свойства Port
на -1
на UriBuilder
приведет к удалению любого явного порта и неявно использует значение порта по умолчанию для схемы протокола.
Ответ 3
Более общее решение (работает с http, https, ftp...) на основе идеи Иана Флинна.
Этот метод не удаляет пользовательский порт, если таковой имеется.
Пользовательский порт определяется автоматически в зависимости от протокола.
var uriBuilder = new UriBuilder("http://www.google.fr/");
if (uriBuilder.Uri.IsDefaultPort)
{
uriBuilder.Port = -1;
}
return uriBuilder.Uri.AbsoluteUri;
Ответ 4
Я использовал бы System.Uri. Я не пробовал, но кажется, что ToString действительно выведет то, что вы хотите:
var url = new Uri("http://google.com:80/asd?qwe=asdff");
var cleanUrl = url.ToString();
Если нет, вы можете объединить компоненты url
-members для создания строки cleanUrl
.
Ответ 5
var url = "http://google.com:80/asd?qwe=zxc#asd";
var regex = new Regex(@":\d+");
var cleanUrl = regex.Replace(url, "");
решение с System.Uri
также возможно, но будет более раздутым.
Ответ 6
Вы также можете использовать свойства URIBuilder для этого он имеет свойства для вывода URL-адреса, как вы хотите
Ответ 7
Хорошо, спасибо, я понял это... использовал принцип KISS...
string redirectstr = String.Format(
"http://localhost/Gradebook/AcademicHonestyGrid.aspx?StudentID={0}&ClassSectionId={1}&uid={2}",
studid,
intSectionID,
HttpUtility.UrlEncode(encrypter.Encrypt(uinfo.ToXml())));
Response.Redirect(redirectstr );
отлично работает для того, что я делаю, что является тестовым жгутом