.NET 7+Angular项目Authorization中间件异常解决求助
问题根源
你的异常是由于中间件顺序错误以及缺失显式授权服务配置导致的,.NET对中间件执行顺序有严格要求,错误的顺序会导致授权元数据无法被正确处理。
修复步骤
1. 显式添加授权服务
在builder.Services.AddControllersWithViews();之前或之后,添加授权服务注册:
builder.Services.AddAuthorization();
虽然AddControllersWithViews会隐含添加基础授权服务,但显式注册可以避免潜在的配置缺失问题,尤其是当你需要自定义授权策略时。
2. 修正中间件执行顺序
将中间件调整为以下正确顺序(核心是遵循"路由→身份验证→授权"的流程):
var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); // 先处理静态文件请求,无需经过CORS/授权 app.UseStaticFiles(); // 启用路由匹配,必须在身份验证/授权之前 app.UseRouting(); // 应用CORS策略,需在路由之后、授权之前 app.UseCors("MyOrigin"); // 身份验证中间件,需在路由之后、授权之前 app.UseAuthentication(); // 授权中间件,需在身份验证之后、端点映射之前 app.UseAuthorization(); // 映射控制器路由 app.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); app.MapFallbackToFile("index.html"); app.Run();
顺序说明
UseStaticFiles:优先处理静态资源(如Angular打包后的文件),避免不必要的CORS/授权检查UseRouting:先确定请求对应的端点,后续中间件才能针对端点应用身份验证和授权规则UseCors:必须在UseRouting之后,确保只对匹配到的API端点应用CORS策略UseAuthentication:先完成用户身份校验,为授权提供身份信息UseAuthorization:基于已验证的身份,检查用户是否有权限访问目标端点
验证修复
重新启动项目,调用UploadNewPmFile接口,确认异常消失。
内容的提问来源于stack exchange,提问作者Alex Wright
相关产品推荐
相关产品推荐

