Calea absolută înapoi la calea de web-relativă

voturi
58

Dacă am reușit să localizeze și să verifice existența unui fișier folosind Server.MapPath și acum vreau să trimit direct utilizatorul la acel fișier, ceea ce este cel mai rapid mod de a converti această cale absolută înapoi într - o cale de web relativă?

Întrebat 06/08/2008 la 09:34
sursa de către utilizator
În alte limbi...                            


6 răspunsuri

voturi
49

Poate că acest lucru ar putea să funcționeze:

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

Sunt folosind C #, dar ar putea fi adaptat la vb.

Publicat 06/08/2008 la 10:28
sursa de către utilizator

voturi
34

Nu ar fi frumos să avem Server.RelativePath (cale) ?

bine, trebuie doar să-l extindă ;-)

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

Cu aceasta puteți apela pur și simplu

Server.RelativePath(path, Request);
Publicat 07/03/2011 la 18:27
sursa de către utilizator

voturi
12

Știu că acest lucru este vechi, dar am nevoie pentru a ține cont de directoare virtuale (pe @ comentariu Costo lui). Acest lucru pare să ajute:

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.");
}
Publicat 05/05/2012 la 15:05
sursa de către utilizator

voturi
4

Îmi place ideea de la Canoas. Din păcate, nu am avut „HttpContext.Current.Request“ disponibile (BundleConfig.cs).

Am schimbat Methode ca aceasta:

public static string RelativePath(this HttpServerUtility srv, string path)
{
     return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
Publicat 24/06/2015 la 08:19
sursa de către utilizator

voturi
2

Dacă ați folosit Server.MapPath, atunci ar trebui să aibă deja calea de web relativă. Conform documentației MSDN , această metodă are o variabilă, calea , care este calea virtuală a serverului Web. Deci , dacă ați putea să apelați metoda, ar trebui să aveți deja calea de web relativ accesibil imediat.

Publicat 06/08/2008 la 09:44
sursa de către utilizator

voturi
0

Pentru core asp.net am scris clasa de ajutor pentru a obține traiectoriile în ambele direcții.

public class FilePathHelper
{
    private readonly IHostingEnvironment _env;
    public FilePathHelper(IHostingEnvironment env)
    {
        _env = env;
    }
    public string GetVirtualPath(string physicalPath)
    {
        if (physicalPath == null) throw new ArgumentException("physicalPath is null");
        if (!File.Exists(physicalPath)) throw new FileNotFoundException(physicalPath + " doesn't exists");
        var lastWord = _env.WebRootPath.Split("\\").Last();
        int relativePathIndex = physicalPath.IndexOf(lastWord) + lastWord.Length;
        var relativePath = physicalPath.Substring(relativePathIndex);
        return $"/{ relativePath.TrimStart('\\').Replace('\\', '/')}";
    }
    public string GetPhysicalPath(string relativepath)
    {
        if (relativepath == null) throw new ArgumentException("relativepath is null");
        var fileInfo = _env.WebRootFileProvider.GetFileInfo(relativepath);
        if (fileInfo.Exists) return fileInfo.PhysicalPath;
        else throw new FileNotFoundException("file doesn't exists");
    }

de la controler sau serviciu injecta FilePathHelper și utilizarea:

var physicalPath = _fp.GetPhysicalPath("/img/banners/abro.png");

și invers

var virtualPath = _fp.GetVirtualPath(physicalPath);
Publicat 19/12/2018 la 11:40
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more