2010-12-10 22 views
5

z różnych powodów, w rozwoju od czasu do czasu chcą przechwycić wniosek o, powiedzmy, ~/MyStyle.cssASP.NET MVC Pobierz plik ze ścieżką wirtualną

Co chcę zrobić, to następujące prace Snippet:

string absFile = VirtualPathUtility.ToAbsolute(file); 
return System.IO.File.ReadAllText(absFile); 

Ta absolutna ścieżka jest absolutna dla serwera WWW, ale nie zamienia się na "C: \ cokolwiek". Czy istnieje odpowiednia metoda, aby przejść do systemu plików? (Lub ReadFromVirtualPath itd.?)

Odpowiedz

18

Użyj Server.MapPath(), aby uzyskać ścieżkę do systemu plików dla żądanej ścieżki aplikacji.

string absFile = Server.MapPath(file); 

lub

string absFile = HttpContext.Current.Server.MapPath(file); 
6

Można również użyć metody OpenFile na VirtualPathProvider aby uzyskać strumień wskazując na pliku

var stream = HostingEnvironment.VirtualPathProvider.OpenFile(file); 
var text = new StreamReader(stream).ReadToEnd(); 

Ogólnie takie podejście jest korzystne, ponieważ teraz może w późniejszy punkt implementacji VirtualPathProvider gdzie, pozwala powiedzieć wszystkie twoje pliki css, gdzie znajduje się w bazie danych.