Server.MapPath を使用してファイルの存在を見つけて確認でき、ユーザーをそのファイルに直接送りたい場合、その絶対パスを相対 Web パスに変換する最速の方法は何ですか?
質問する
58410 次
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 に答える