Eu tenho um URL como este:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Eu quero sair http://www.example.com/mypage.aspx
disso.
Você pode me dizer como posso obtê-lo?
Eu tenho um URL como este:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Eu quero sair http://www.example.com/mypage.aspx
disso.
Você pode me dizer como posso obtê-lo?
Respostas:
Você pode usar System.Uri
Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme,
Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);
Ou você pode usar substring
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));
EDIT: Modificando a primeira solução para refletir a sugestão de brillyfresh nos comentários.
substring
método dará erro se não houver uma string de consulta. Use em string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);
vez disso.
Aqui está uma solução mais simples:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);
Emprestado aqui: Truncando a string de consulta e retornando URL limpo C # ASP.net
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(
é outro método incrível para obter partes de um Uri. Eu não sabia sobre esses dois até agora!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrl
o URL será obtido antes que o URL seja reescrito AbsoluteUri
. Request.Url.AbsoluteUri.Split('?')[0]
Boa resposta também encontrada aqui fonte de resposta
Request.Url.GetLeftPart(UriPartial.Path)
O meu caminho:
new UriBuilder(url) { Query = string.Empty }.ToString()
ou
new UriBuilder(url) { Query = string.Empty }.Uri
Uri.GetLeftPart
. Última versão do NET núcleo (1.1) deveria ter esse método (confirmar não posso porque eu não estou no núcleo net 1,1 por agora)
Você pode usar Request.Url.AbsolutePath
para obter o nome da página e Request.Url.Authority
o nome do host e porta. Não acredito que exista uma propriedade incorporada para fornecer exatamente o que você deseja, mas você pode combiná-las.
Variação Split ()
Eu só quero adicionar essa variação para referência. Os URLs geralmente são strings e, portanto, é mais simples de usar o Split()
método Uri.GetLeftPart()
. E Split()
também pode ser feito para trabalhar com valores relativos, vazios e nulos, enquanto Uri lança uma exceção. Além disso, os URLs também podem conter um hash, como/report.pdf#page=10
(que abre o pdf em uma página específica).
O método a seguir lida com todos esses tipos de URLs:
var path = (url ?? "").Split('?', '#')[0];
Saída de exemplo:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
Aqui está um método de extensão usando a resposta de @ Kolman. É marginalmente mais fácil lembrar de usar Path () do que GetLeftPart. Você pode renomear Path para GetPath, pelo menos até que eles adicionem propriedades de extensão ao C #.
Uso:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=bar");
string path = uri.Path();
A classe:
using System;
namespace YourProject.Extensions
{
public static class UriExtensions
{
public static string Path(this Uri uri)
{
if (uri == null)
{
throw new ArgumentNullException("uri");
}
return uri.GetLeftPart(UriPartial.Path);
}
}
}
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.split('?')[0];
Request.RawUrl.Split('?')[0]
Apenas para o nome do URL !!
Eu criei uma extensão simples, pois algumas das outras respostas lançaram exceções nulas se não houvesse um QueryString
começo:
public static string TrimQueryString(this string source)
{
if (string.IsNullOrEmpty(source))
return source;
var hasQueryString = source.IndexOf('?') != -1;
if (!hasQueryString)
return source;
var result = source.Substring(0, source.IndexOf('?'));
return result;
}
Uso:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
System.Uri.GetComponents
, apenas componentes especificados que você deseja.
Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Resultado:
http://www.example.com/mypage.aspx
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Tente o seguinte:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
disso: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye, você verá o seguinte: mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))