在IIS中刷新与ASP.NET Core Web API一起托管的Angular 应用程序时,我遇到了404错误.尽管在web.config文件中添加了重写,但该问题仍然存在.我的基本URL配置如下:

<base href="/">

以下是位于wwwroot文件夹中的web.config文件的内容:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="AngularJS Routes" stopProcessing="true">
              <match url=".*" />
              <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />   
              </conditions>
              <action type="Rewrite" url="/" />
            </rule>
          </rules>
        </rewrite>
        <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/index.html" responseMode="ExecuteURL" />
        </httpErrors>
      </system.webServer>
    </configuration>

我试过几种方法都没有成功.有人能帮助我解决这个问题吗?任何帮助将不胜感激.谢谢

推荐答案

对于您的场景,这可以通过使用URL重写从machine level来实现,但我不推荐它,原因很简单,它会给future 的升级或部署带来挑战.

但我的建议是,更倾向于从code level解决问题,它将更加用户友好,并将与Linux和其他系统兼容.

我们可以通过ASP.NET核心中的静态文件中间件来实现这一点,如下所示.

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();


app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();


app.MapControllers();
app.MapFallbackToFile("index.html");

app.Run();

Angular相关问答推荐

从嵌套组件导航到命名路由中的顶级路由

Angular 信号效果,try 重置表单并获取在计算或效果中不允许写入信号"

PrimeNG侧栏清除primeNG消息.为什么?

Angular中的Bootstrap carousel动态属性

AG网格Angular 快捷菜单调用函数

更改动态表单控制Angular 的值

从canActivate创建时,Angular material 对话框不接收MAT_DIALOG_DATA

Angular 16+使用ngTemplateOutlet有条件地呈现几个模板中的一个

Angular 信号 - 使用 mutate() 与使用 forEach() react 性

我需要取消订阅路由的可观察事件吗

Angular 为什么延迟加载返回空路径?

显示 1 个数据而不是所有 ngFor - Angular 11

如何以Angular 改变环境

如何检测滚动到html元素的底部

等待多个promises完成

angular 2 http withCredentials

Angular @NGRX中这三个点的含义是什么

Angular 2:为什么在检索路由参数时使用 switchMap?

使用 EventEmitter 传递参数

'ng' 不是内部或外部命令、可运行程序或批处理文件