web-dev-qa-db-ja.com

C#でURLパスを取得する方法

URLの現在のページを除くURLのすべてのパスを取得したい。たとえば、私のURLは http://www.MyIpAddress.com/red/green/default.aspx 取得したい" http://www.MyIpAddress.com/red/green/ "のみ。どうやって手に入れられますか

string sPath = new Uri(HttpContext.Current.Request.Url.AbsoluteUri).OriginalString; System.Web.HttpContext.Current.Request.Url.AbsolutePath;
            sPath = sPath.Replace("http://", "");
            System.IO.FileInfo oInfo = new System.IO.FileInfo(sPath);
            string sRet = oInfo.Name;
            Response.Write(sPath.Replace(sRet, ""));

SPathとしての新しいSystem.IO.FileInfo(sPath)の例外には、「指定されたパスの形式はサポートされていません」という「localhost/red/green/default.aspx」が含まれています。

18
Nomi Ali

URIの問題としてではなく、文字列の問題として扱います。その後、それは素敵で簡単です。

String originalPath = new Uri(HttpContext.Current.Request.Url.AbsoluteUri).OriginalString;
String parentDirectory = originalPath.Substring(0, originalPath.LastIndexOf("/"));

本当に簡単です!

欠落している括弧を追加するように編集されました。

12
jwa

メインURL: http:// localhost:8080/mysite/page.aspx?p1 = 1&p2 = 2

C#でURLのさまざまな部分を取得します。

Value of HttpContext.Current.Request.Url.Host
localhost

Value of HttpContext.Current.Request.Url.Authority
localhost:8080

Value of HttpContext.Current.Request.Url.AbsolutePath
/mysite/page.aspx

Value of HttpContext.Current.Request.ApplicationPath
/mysite

Value of HttpContext.Current.Request.Url.AbsoluteUri
http://localhost:8080/mysite/page.aspx?p1=1&p2=2

Value of HttpContext.Current.Request.RawUrl
/mysite/page.aspx?p1=1&p2=2

Value of HttpContext.Current.Request.Url.PathAndQuery
/mysite/page.aspx?p1=1&p2=2
73
Shibu Thomas

これを置き換える:

            string sRet = oInfo.Name;
            Response.Write(sPath.Replace(sRet, ""));

次の場合:

        string sRet = oInfo.Name;           
        int lastindex = sRet.LastIndexOf("/");
        sRet=sRet.Substring(0,lastindex)
        Response.Write(sPath.Replace(sRet, ""));
3

これを使って

string sPath = (HttpContext.Current.Request.Url).ToString();
sPath = sPath.Replace("http://", "");
var oInfo = new  System.IO.FileInfo(HttpContext.Current.Request.RawUrl);
string sRet = oInfo.Name;
Response.Write(sPath.Replace(sRet, ""));
2
Ratna

これにより、サイト上の別のページに移動しようとしているだけで欲しい場合がありますが、本当に必要な場合は絶対パスを取得できません。絶対パスを使用せずにサイト内を移動できます。

string loc = "";
loc = HttpContext.Current.Request.ApplicationPath + "/NewDestinationPage.aspx";
Response.Redirect(loc, true);

絶対パスが本当に必要な場合は、パーツを選択して、Uriクラスで必要なものを構築できます。

Uri myUri = new Uri(HttpContext.Current.Request.Url.AbsoluteUri)
myUri.Scheme
myUri.Host  // or DnsSafeHost
myUri.Port
myUri.GetLeftPart(UriPartial.Authority)  // etc.

良い記事 ASP.NETパスの件名について。

0
B H