Jaki jest właściwy sposób na znalezienie bezwzględnej ścieżki do folderu App_Data z kontrolera w projekcie ASP.NET MVC? Chciałbym mieć możliwość tymczasowej pracy z plikiem .xml i nie chcę kodować ścieżki na stałe.
To nie działa:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Myślę, że poza kontekstem sieciowym VirtualPathUtility.ToAbsolute () nie działa. ścieżka łańcucha powraca jako „C: \ App_Data \ somedata.xml”
Gdzie powinienem określić ścieżkę do pliku .xml w aplikacji MVC? global.asax i włożyć zmienną na poziomie aplikacji?
.net
asp.net-mvc
absolute-path
BuddyJoe
źródło
źródło
Odpowiedzi:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
Odniesienie MSDN:
Metoda HttpServerUtility.MapPath
źródło
Current
alboServer.MapPath(...)
jak wspomniałem SeriousM.System.Web.Hosting.HostingEnvironment.MapPath()
Jest to prawdopodobnie bardziej „poprawny” sposób uzyskania tego.
źródło
Staram się przyzwyczaić do używania
HostingEnvironment
zamiast,Server
ponieważ działa to również w kontekście usług WCF.źródło
System.Web.Hosting
przestrzeni nazw, na wypadek, gdyby ktoś musiał znać odpowiednie informacjeusing
. Ref: docs.microsoft.com/en-us/dotnet/api/…Najbardziej poprawnym sposobem jest użycie
HttpContext.Current.Server.MapPath("~/App_Data");
. Oznacza to, że możesz pobrać ścieżkę tylko z metody, w którejHttpContext
jest ona dostępna. Ma to sens: katalog App_Data jest strukturą folderów projektu WWW [1].Jeśli potrzebujesz ścieżki do ~ / App_Data z klasy, do której nie masz dostępu
HttpContext
, zawsze możesz wstrzyknąć interfejs dostawcy przy użyciu kontenera IoC:Zaimplementuj go, używając
HttpApplication
:Gdzie
MyHttpApplication.GetAppDataPath
wygląda:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
źródło
HttpContext.Current
kiedykolwiek nie być dostępny w jednym miejscu, jeśli używasz go - za pośrednictwem kontenera IoC - w innym miejscu? Gdzie właściwość statyczna byłaby niedostępna?Phil Haak ma przykład, który moim zdaniem jest nieco bardziej stabilny w przypadku ścieżek z szalonymi separatorami katalogów w stylu „\”. Bezpiecznie obsługuje także łączenie ścieżek. Jest dostępny za darmo w System.IO
Możesz także wypróbować „AppDomain.CurrentDomain.BaseDirector” zamiast „Server.MapPath”.
źródło
LUB
źródło
jest to najlepsze rozwiązanie, aby uzyskać ścieżkę, która jest dokładnie potrzebna na teraz
źródło