Ben böyle bir URL var:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Elde etmek istiyorum http://www.example.com/mypage.aspx .
Nasıl anlayabileceğimi söyleyebilir misin?
Ben böyle bir URL var:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Elde etmek istiyorum http://www.example.com/mypage.aspx .
Nasıl anlayabileceğimi söyleyebilir misin?
Yanıtlar:
Kullanabilirsiniz 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);
Veya kullanabilirsiniz substring
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));
EDIT: Brillyfresh'in yorumdaki önerisini yansıtacak şekilde ilk çözümü değiştirmek.
substringHiçbir Sorgu dizesi varsa yöntem hatası verecektir. string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);Bunun yerine kullanın .
İşte daha basit bir çözüm:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);
Buradan ödünç alındı: Sorgu Dizesini Kırpma ve Temiz URL C Döndürme C # ASP.net
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(bir Uri'nin parçalarını almak için başka bir harika yöntemdir. Bu ikisini şimdiye kadar bilmiyordum!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrlURL'yi alacak önce belki kullanmak, URL yeniden yazar AbsoluteUri? Request.Url.AbsoluteUri.Split('?')[0]
İyi cevap burada da cevap kaynağı buldu
Request.Url.GetLeftPart(UriPartial.Path)
Benim yolum:
new UriBuilder(url) { Query = string.Empty }.ToString()
veya
new UriBuilder(url) { Query = string.Empty }.Uri
Uri.GetLeftPart. NET Core (1.1) 'in son sürümü bu yönteme sahip olmalıdır (şu an net çekirdek 1.1'de olmadığım için onaylayamıyorum)
Sen kullanabilirsiniz Request.Url.AbsolutePathsayfa adını almak ve Request.Url.Authorityana bilgisayar adı ve port için. Tam olarak ne istediğinizi vermek için yerleşik bir mülk olduğuna inanmıyorum, ancak bunları kendiniz birleştirebilirsiniz.
Split () Varyasyonu
Sadece referans için bu varyasyonu eklemek istiyorum. Url'ler genellikle dizelerdir ve bu nedenle Split()yöntemi kullanmak daha kolaydır Uri.GetLeftPart(). Ve Split()Uri bir istisna atar oysa aynı zamanda akrabası olan boş ve boş değerleri ile çalışmalarına yapılabilir. Buna ek olarak, Url'ler, (pdf'yi /report.pdf#page=10belirli bir sayfada açan) gibi bir karma da içerebilir .
Aşağıdaki yöntem tüm bu URL türleriyle ilgilidir:
var path = (url ?? "").Split('?', '#')[0];
Örnek Çıktı:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
İşte @ Kolman'ın cevabını kullanan bir uzatma yöntemi. Path () 'i kullanmayı hatırlamak marjinal olarak GetLeftPart'tan daha kolaydır. En azından C # 'a uzantı özellikleri ekleyene kadar Yolu GetPath olarak yeniden adlandırmak isteyebilirsiniz.
Kullanımı:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=bar");
string path = uri.Path();
Sınıf:
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];
System.Uri.GetComponents, istediğiniz bileşenleri belirtin.
Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Çıktı:
http://www.example.com/mypage.aspx
Request.RawUrl.Split('?')[0]
Sadece url adı için !!
Basit bir uzantı oluşturdum, çünkü diğer cevaplardan birkaçı bir QueryStringbaşlangıç olmasa da boş istisnalar attı :
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;
}
Kullanımı:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Bunu dene:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
bundan: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye bunu alacaksınız: mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))