66

Server.MapPath を使用してファイルの存在を見つけて確認でき、ユーザーをそのファイルに直接送りたい場合、その絶対パスを相対 Web パスに変換する最速の方法は何ですか?

4

6 に答える 6

56

おそらくこれはうまくいくかもしれません:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);

私はc#を使用していますが、vbに適応させることができます.

于 2008-08-06T09:28:50.940 に答える
38

Server.RelativePath(path)があればいいと思いませんか?

まあ、あなたはそれを拡張する必要があります;-)

public static class ExtensionMethods
{
    public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
    {
        return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
    }
}

これであなたは単に呼び出すことができます

Server.RelativePath(path, Request);
于 2011-03-07T17:27:02.383 に答える
13

これが古いことは知っていますが、仮想ディレクトリを説明する必要がありました(@Costoのコメントによる)。これは役立つようです:

static string RelativeFromAbsolutePath(string path)
{
    if(HttpContext.Current != null)
    {
        var request = HttpContext.Current.Request;
        var applicationPath = request.PhysicalApplicationPath;
        var virtualDir = request.ApplicationPath;
        virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
        return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
    }

    throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}
于 2012-05-05T14:05:48.737 に答える
2

Server.MapPath を使用した場合は、相対 Web パスが既にあるはずです。MSDN ドキュメントによると、このメソッドは、Web サーバーの仮想パスである1 つの変数pathを取ります。したがって、メソッドを呼び出すことができた場合は、相対 Web パスにすぐにアクセスできるようになっているはずです。

于 2008-08-06T08:44:34.820 に答える