14

仮想ディレクトリは異なる名前のフォルダにリンクできることがわかっているので、仮想ディレクトリの物理パスを取得するにはどうすればよいですか?

HttpContext.Current.server.MapPathを試しましたが、ディレクトリが存在しない場合や、異なる名前で存在する場合でも、物理パスとパラメータで送信したパスが返されます。

例:

C:\ blabla \ Sites \ Application1\Imaageesss-ディスク上

Application1 \ Images(ISSでは、私の仮想ディレクトリ)

しかし、「/ Images」でMapPathを実行すると、C:\ blabla \ Sites \ Application1 \ Imaageesssは表示されませんが、リンク先の実際のディレクトリではないC:\ inetpub \ wwwroot\Imagesが表示されます。

4

6 に答える 6

15
Server.MapPath("~/Images")

「〜」はアプリケーションのルートを参照するため、これは正しい方法です。

于 2013-05-16T00:12:18.447 に答える
8

これは私のために働いたものです:

string physicalPath =    
System.Web.Hosting.HostingEnvironment.MapPath(HttpContext.Current.Request.ApplicationPath);
于 2012-09-17T19:44:48.600 に答える
3

この小さなスニペットを試してみたらどうでしょうか。

string physicalPath = HttpContext.Current.Request.MapPath(appPath);
于 2012-06-11T19:47:44.043 に答える
1

さらに調査した結果、仮想IISディレクトリの物理パスを取得するメソッドを作成することができました。

public static string VirtualToPhysicalPath(string vPath) {
    // Remove query string:
    vPath = Regex.Replace(vPath, @"\?.+", "").ToLower();

    // Check if file is in standard folder:
    var pPath = System.Web.Hosting.HostingEnvironment.MapPath("~" + vPath);
    if (System.IO.File.Exists(pPath)) return pPath;

    // Else check for IIS virtual directory:
    var siteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
    var sm = new Microsoft.Web.Administration.ServerManager();
    var vDirs = sm.Sites[siteName].Applications[0].VirtualDirectories;
    foreach (var vd in vDirs) {
        if (vd.Path != "/" && vPath.Contains(vd.Path.ToLower())) pPath = vPath.Replace(vd.Path.ToLower(), vd.PhysicalPath).Replace("/", "\\");
    }
    return pPath;
}

警告:このソリューションは、ルートアプリケーション(Applications [0])しかないことを前提としています。

于 2016-09-09T13:37:29.763 に答える
1

以下は問題なく動作するはずです。

var physicalPath = HostingEnvironment.MapPath("~/MyVirtualDirectory");
于 2018-11-27T15:09:02.663 に答える
0

これはあなたの質問に答えるかもしれません:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.physicalpath.aspx

ただし、やるべきことがたくさんあるので、現在例を示すことはできません。時間があれば詳細情報をお送りします。

于 2012-06-11T19:48:49.797 に答える