Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 从父目录运行网站时,asp.net核心MVC静态文件出现404错误_Asp.net Core_Command Line Interface - Fatal编程技术网

Asp.net core 从父目录运行网站时,asp.net核心MVC静态文件出现404错误

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中的路

我最近有一个难以理解的错误

我将ASP.NET核心MVC web应用程序发布到一个文件夹, 当我输入网站的根路径并使用命令运行它时

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采用运行命令的路径。所以物理路径出错了,我将给出这种情况的解决方案。谢谢。