我在两个不同的项目中开发了。net 5 web api和React应用程序。现在是时候将API和React应用程序部署到IIS了,但在尝试实现这一目标时,我意识到它们必须作为相同的应用程序添加到IIS中。我希望路由设置是:
- /=比;反应应用
- /api/v1/控制器/方法=比;API端点
我的两个应用程序都有这个设置,我只是不能合并它们:/
我找不到不使用。net模板的例子。到目前为止,我已经尝试通过以下代码完成该任务(我跳过了不相关的配置代码):
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp";
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
我在。net 6中实现了这一点:
1 -使用package.json
中的postbuild
步骤,将我的React应用的生产构建复制到Web API的wwwroot文件夹中"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"postbuild": "move build ../YourWebAPIProject/wwwroot",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
2 -更新了Web API项目中的program.cs
,以包含以下
app.UseRouting();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(config =>
{
config.MapControllers();
config.MapFallbackToController("Index", "Fallback");
});
3 -添加一个回退控制器来处理反应路由
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace YourNameSpace
{
[AllowAnonymous]
public class FallbackController : Controller
{
public IActionResult Index()
{
return PhysicalFile(
Path.Combine(
Directory.GetCurrentDirectory(), "wwwroot", "index.html"),
"text/HTML");
}
}
}
这种方法允许WebAPI和React路由同时工作,从WebAPI项目中提供服务。
希望对某人有用
我已经设法通过添加这些行来解决它:
in ConfigureServices
if (HostingEnvironment.IsProduction())
{
services.AddSpaStaticFiles(configuration =>
configuration.RootPath ="ClientApp");
}
in Configure
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
if (env.IsProduction())
{
app.UseSpaStaticFiles();
app.UseSpa(spa =>
{
spa.Options.DefaultPage = "/index.html";
});