Qual é a maneira correta de encontrar o caminho absoluto para a pasta App_Data de um Controller em um projeto ASP.NET MVC? Gostaria de poder trabalhar temporariamente com um arquivo .xml e não quero codificar o caminho.
Isso não funciona:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Eu acho que fora do contexto da Web VirtualPathUtility.ToAbsolute () não funciona. caminho da string volta como "C: \ App_Data \ somedata.xml"
Onde devo determinar o caminho do arquivo .xml em um aplicativo MVC? global.asax e cole uma variável no nível do aplicativo?
.net
asp.net-mvc
absolute-path
BuddyJoe
fonte
fonte
Respostas:
ASP.net MVC1 -> MVC3
ASP.NET MVC4
Referência do MSDN:
Método HttpServerUtility.MapPath
fonte
Current
ouServer.MapPath(...)
como SeriousM mencionou.System.Web.Hosting.HostingEnvironment.MapPath()
Esta é provavelmente uma maneira mais "correta" de obtê-lo.
fonte
Eu tento adquirir o hábito de usar em
HostingEnvironment
vez de,Server
pois também funciona no contexto dos serviços WCF.fonte
System.Web.Hosting
espaço para nome, caso alguém precise saber o relevanteusing
. Ref: docs.microsoft.com/pt-br/dotnet/api/…A maneira mais correta é usar
HttpContext.Current.Server.MapPath("~/App_Data");
. Isso significa que você só pode recuperar o caminho de um método em que eleHttpContext
está disponível. Faz sentido: o diretório App_Data é uma estrutura de pastas do projeto da web [1].Se você precisar do caminho para ~ / App_Data de uma classe na qual você não tem acesso,
HttpContext
sempre poderá injetar uma interface de provedor usando seu contêiner IoC:Implemente usando seu
HttpApplication
:Onde se
MyHttpApplication.GetAppDataPath
parece:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
fonte
HttpContext.Current
já não estar disponível em um lugar se você estiver usando ele - através de um contêiner IoC - em outro lugar? Onde a propriedade estática não estaria disponível?Phil Haak tem um exemplo que eu acho que é um pouco mais estável quando se lida com caminhos com "\" separadores de diretório malucos. Ele também lida com segurança com concatenação de caminho. É fornecido gratuitamente no System.IO
No entanto, você também pode tentar "AppDomain.CurrentDomain.BaseDirector" em vez de "Server.MapPath".
fonte
OU
fonte
esta é a melhor solução para seguir o caminho que é exatamente necessário agora
fonte