Asp.net core 从父目录运行网站时,asp.net核心MVC静态文件出现404错误
我最近有一个难以理解的错误 我将ASP.NET核心MVC web应用程序发布到一个文件夹, 当我输入网站的根路径并使用命令运行它时Asp.net core 从父目录运行网站时,asp.net核心MVC静态文件出现404错误,asp.net-core,command-line-interface,Asp.net Core,Command Line Interface,我最近有一个难以理解的错误 我将ASP.NET核心MVC web应用程序发布到一个文件夹, 当我输入网站的根路径并使用命令运行它时 d:\publish> dotnet WebSite.dll 一切正常 但当我转到这个网站的父文件夹,然后使用下面的命令运行它 d:\> dotnet ./publish/WebSite.dll 网站可以访问,但所有静态文件都出现404错误 我想知道,为什么?如何解决此问题?因为usesticfiles使用env.ContentRootPath中的路
d:\publish> dotnet WebSite.dll
一切正常
但当我转到这个网站的父文件夹,然后使用下面的命令运行它
d:\> dotnet ./publish/WebSite.dll
网站可以访问,但所有静态文件都出现404错误
我想知道,为什么?如何解决此问题?因为
usesticfiles
使用env.ContentRootPath
中的路径,但是env.ContentRootPath
将采用运行dotnet
命令的路径,因此物理路径出错
我重新分配了基本物理路径,如下所示:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider($@"{AppDomain.CurrentDomain.BaseDirectory}/wwwroot")
});
所有静态资源都被重新访问。似乎读取了错误的文件路径,当我显示ContentRootPath时,它显示了当前的运行命令路径D:\。这可能是由于您使用的路径。在Razor代码中,您使用
~/
路径前缀指定它应该相对于文档根。如果只在路径的开头使用/
,那么这将是相对域的,这可能是相同的,也可能不是相同的。请记住,~/
是非标准的,所以它只适用于Razor视图之类的视图,因为Razor会为您推断。如果在JS文件中引用路径,则需要另一种解决方案。似乎app.UseStaticFiles使用的根路径依赖于env.ContentRootPath,因为env.ContentRootPath采用运行命令的路径。所以物理路径出错了,我将给出这种情况的解决方案。谢谢。