ASP.Net core 3.0 (3.1) 为单页应用设置PathBase
ASP.Net core 3.0 (3.1) set PathBase for single page application
我配置了以下 asp.net 核心 spa 应用程序(react-redux 模板)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UsePathBase(new PathString("/foo"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
}
我想为应用设置pathBase,但是app.UsePathBase(new PathString("/foo"))
被忽略了。在 2.2 上它完美地工作。自动修改 index.html 并将所有静态文件移至相对路径。但是在 3.0 (3.1) 上静态+生成的文件放在根目录下。
Generated files on .Net Core 2.2
Generated files on .Net Core 3.0
有没有人有解决的办法?或者可能是 Startup.cs 的一些示例,其中包含有效的 pathBase?
通常使用app.UsePathBase(new PathString("/foo"));
因为反向代理切断了一些前缀导致ASP.NET核心应用没有意识到虚拟应用路径以[=12开始=].在您的场景中,如果您没有将前缀重写为空字符串的反向代理,则不需要 app.UsePathBase(...)
。
相反,如果您的 spa 在子路径上运行,您可以设置一个中间件来分支 /foo
。
- 最后,您可能想在
package.json
中添加一个 属性 of homepage
,这样它会在发布时生成 <base url="/foo/"/>
。或者,您可以手动更新 ClientApp/public/index.html
中的 <base url="">
。
简而言之,在您的 package.json
中添加一个 "homepage": "/foo/"
"private": true,
"homepage": "/foo/",
"dependencies": {
...
}
并设置一个 /foo
分支以使 SPA 在该路径下运行:
string spaPath = "/foo";
app.Map(spaPath,appBuilder =>{
appBuilder.UseSpa(spa =>
{
spa.Options.DefaultPage = spaPath+"/index.html";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions{
RequestPath = spaPath,
};
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
});
不要使用 app.UsePathBase(new PathString("/foo"))
除非你明白你确实想要覆盖所有路由的路径基础。
我配置了以下 asp.net 核心 spa 应用程序(react-redux 模板)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UsePathBase(new PathString("/foo"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
}
我想为应用设置pathBase,但是app.UsePathBase(new PathString("/foo"))
被忽略了。在 2.2 上它完美地工作。自动修改 index.html 并将所有静态文件移至相对路径。但是在 3.0 (3.1) 上静态+生成的文件放在根目录下。
Generated files on .Net Core 2.2
Generated files on .Net Core 3.0
有没有人有解决的办法?或者可能是 Startup.cs 的一些示例,其中包含有效的 pathBase?
通常使用
app.UsePathBase(new PathString("/foo"));
因为反向代理切断了一些前缀导致ASP.NET核心应用没有意识到虚拟应用路径以[=12开始=].在您的场景中,如果您没有将前缀重写为空字符串的反向代理,则不需要app.UsePathBase(...)
。相反,如果您的 spa 在子路径上运行,您可以设置一个中间件来分支
/foo
。- 最后,您可能想在
package.json
中添加一个 属性 ofhomepage
,这样它会在发布时生成<base url="/foo/"/>
。或者,您可以手动更新ClientApp/public/index.html
中的<base url="">
。
简而言之,在您的 package.json
"homepage": "/foo/"
"private": true, "homepage": "/foo/", "dependencies": { ... }
并设置一个 /foo
分支以使 SPA 在该路径下运行:
string spaPath = "/foo";
app.Map(spaPath,appBuilder =>{
appBuilder.UseSpa(spa =>
{
spa.Options.DefaultPage = spaPath+"/index.html";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions{
RequestPath = spaPath,
};
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
});
不要使用 app.UsePathBase(new PathString("/foo"))
除非你明白你确实想要覆盖所有路由的路径基础。