似乎来自 .Net Core Web API 的 Angular 重定向在共享部署中不起作用。我正在使用 .Net Core 7 作为 Web api。当前设置与 .Net Core 6 完美配合。
下图显示了我的构建文件结构(图1)。
.Net Core Web API 构建文件如上图所示
上图中的 wwwroot 文件夹包含 Angular 构建文件。
上图显示了角度构建文件。
下面显示了 webapi program.cs 代码
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 && !System.IO.Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
我知道下面的program.cs代码行负责在请求的URL与任何端点都不匹配时将请求重定向到角度应用程序。
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 && !System.IO.Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/index.html";
await next();
}
});
我已将上述文件夹结构(图 1)部署到 Azure 应用服务。
当我点击 https://sitename.azurewebsites.net/weatherforecast 时,我收到了 API 响应。
然而,当我点击 https://sitename.azurewebsites.net 时,由于 webapi 中不存在这样的端点,我希望请求被重定向到 wwwroot 文件夹内的 index.html ,以便 Angular页面已呈现。但我收到 404 Not Found 错误。
当我托管 webapi (https://sitenameapi.azurewebsites.net) 和 Angular 应用程序 (https://sitenameangularapp.azurewebsites.net) 作为 2 个独立的 Azure 应用服务时(当然我处理了CORS 部分),应用程序可以运行。我怀疑从 API 到 APP 的重定向是根本原因,但我无法解决它。任何帮助将不胜感激。
我们可以通过ASP.NET Core中的静态文件中间件来实现您的需求,具体代码如下:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapControllers();
app.MapFallbackToFile("index.html");
app.Run();
然后你可以构建/发布你的angualr项目,我们可以获取以下文件然后粘贴到
wwwroot
文件夹中(如果没有这个文件夹,我们需要手动创建它)。