.Net Core WebAPI 重定向到 Angular

问题描述 投票:0回答:1

似乎来自 .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 的重定向是根本原因,但我无法解决它。任何帮助将不胜感激。

angular asp.net-core-webapi shared-hosting asp.net-core-7.0
1个回答
0
投票

我们可以通过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
文件夹中(如果没有这个文件夹,我们需要手动创建它)。

© www.soinside.com 2019 - 2024. All rights reserved.