我做了很多搜索,所以我希望有一个人能救我!
我有一个带有React模板的.net Core3.0应用程序设置。无论是在本地还是在部署时,我都需要在站点的子应用程序上的IIS上运行站点(例如,它被部署到https://trunk.apps.co.uk/app1 )。
身份验证的工作方式(我不能改变,因为这是公司范围内的事情)是我的应用程序有一个控制器,它接受一个authticket,然后设置一个身份验证cookie,然后在每个后续请求中提供它,以便对用户进行身份验证。
我已经设置了要配置的Startup.cs,执行以下操作:
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://localhost:3000");
}
}现在,它按照预期对所有请求进行代理,但是...当react通过npm run start在后台构建应用程序时,它假设所有文件都位于站点的根目录,因此index.html中包含的javascript没有子站点'/app1/‘,例如,在url中,因此这些请求会失败,因为url是错误的(例如,URL是http://trunk.apps.co.uk/static/js/bundle.js,而它需要是http://trunk.apps.co.uk/app1/static/js/bundle.js)
例如,如果我在react项目中将PUBLIC_URL设置为'/app1/‘,那么当react为开发服务器构建应用程序时,Index.html中的url是正确设置的,但是当.net核心应用程序将这些请求代理到http://localhost:3000上时,react开发服务器现在正在http://locahost:3000/app1上运行。
我试着修改了startup.cs中的url:
spa.UseProxyToSpaDevelopmentServer("http://localhost:3000/app1");但是路径/app1会被忽略,请求仍然只是代理到http://localhost:3000。
有谁有什么建议吗?
谢谢,斯科特
发布于 2021-03-26 06:53:47
这对我很有效。
我的react项目是从react boilerplate
解决方案:
webpack.base.bable.js将publicPath更改为/app1/ (其中app1是使用名称配置的子应用程序或子域或子网)。如果您不使用react样板,只需在中进行此更改即可
来自react-router-dom的
BrowserRouter中添加basenameBFF层中的
App.UseStaticFiles(新建StaticFileOptions { FileProvider =新建PhysicalFileProvider( Path.Combine(env.ContentRootPath,"ClientApp/build")),RequestPath = "/app1“});
/app1 to api调用时,所有的BFF api都能正确响应。https://stackoverflow.com/questions/61462623
复制相似问题