C# ASP.NET Core 404,用于带有6个捆绑文件的项目模板(错误的dist输出目录)
我已经用Angular项目模板创建了一个ASP.NET核心应用程序 生成输出 在IIS上部署时,基本href为C# ASP.NET Core 404,用于带有6个捆绑文件的项目模板(错误的dist输出目录),c#,angular,asp.net-core,C#,Angular,Asp.net Core,我已经用Angular项目模板创建了一个ASP.NET核心应用程序 生成输出 在IIS上部署时,基本href为 生成的dist/index.html中脚本的路径为: <script type="text/javascript" src="runtime.js"></script> <script type="text/javascript" src="polyfills.js">&
生成的dist/index.html中脚本的路径为:
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
为什么基本路径设置不正确?
该项目在IIS上运行,我们可以看到index.html的后台初始化消息正确显示,但是如图所示,所有资源都加载在服务器的根“/”上,因此它们得到404
如果我尝试加载http://{SERVERIP}/{PROJECTNAMEHERE}/runtime.js,我发现它可以工作,所以我想这可能只是base href的问题
如何从ASP.NET Core动态设置该基本href?Angular 6引入了每个工作区有多个项目的功能(请参见),每个项目都被编译到dist/内的子文件夹中,但是ASP.NET Core Angular模板与Angular 5一起工作,Angular 5在dist/内立即编译
所以有一种方法可以解决这个问题:打开angular.json并将“outputPath”值从
dist/
更改为简单的dist
在接受了Setrákus关于将这一行包含在Startup.cs文件中的建议后,我继续遇到这个问题
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSpaStaticFiles();
}
因此,经过一些尝试和错误,我发现以下方法对我有效:
- 删除ClientApp中的dist文件夹
- 运行一个指定网站基本href的角度构建命令,例如,如果我的目标是,那么我将运行
'ng build --base-href /ABC/'
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
if (env.IsDevelopment())
{
//spa.UseAngularCliServer(npmScript: "start");
}
}
无需执行任何操作,只需在内部替换base href即可 /src/index.html 之前
<base href="/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
...
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
...
</Target>
之后
<base href="/YOURSITENAMEHERE/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
...
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod --base-href /site name/>
...
</Target>
然后发布asp.net核心站点。我想进一步扩展@tahasultantemuri的答案,我认为这是正确的。唯一的问题是,如果编辑的index.html文件与站点的生产位置相匹配,则在发布后,必须将其更改回原来的位置,否则在本地主机上运行将不再有效。为了避免这种情况,请按如下方式修改.csproj文件 之前
<base href="/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
...
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
...
</Target>
...
...
之后
<base href="/YOURSITENAMEHERE/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
...
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod --base-href /site name/>
...
</Target>
...
你解决这个问题了吗?我也有同样的问题。该项目在IIS express中运行良好,因为它直接在localhost:port中运行,但在发布时无法加载js文件。默认情况下,VS在wwwroot外部的根文件夹上发布ClientApp。我还尝试将ClientApp文件夹移动到wwwroot,尝试设置base href,但没有任何效果。有人有解决方案吗?我遇到了同样的问题。如果我将文件移动到wwwroot文件夹中,效果会很好。所以,我想知道我们如何才能让它在ClientApp/dist中工作。以前在该文件夹中工作过,但突然不起作用。我发现了。在我添加了这行app.UseSpaStaticFiles()之后,它就工作了;在Startup.cs中的Configure方法中