在一个 Angular + ASP.NET Core 应用中, Angular 路由找不到页面时会返回 404 页面,但返回状态码是 200 ,请问有什么办法可以返回 404 状态码?
解决这个问题要从 SSR 的原理开始,
node(express 服务) > angular 路由 > angular 对应的模块 > 有可能请求后端服务获取数据 > 渲染页面 -> 生成响应返回
那么解决办法其实很简单,就是当 angular 路由解析到这是一个 404 页面时,在生成响应的那步设置 response status code 为 404 即可。
具体的代码等我整理好再贴上来。
可以加一个动态页面,找不到路由就去请求这个动态404页面,在这个动态页面里设置Response.Status怎么样
angular 路由可以直接发 http 请求吗?
@dudu: 守卫路由里直接跳过去
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_appConfiguration["Authentication:Secret"])); var tokenValidationParameters = new TokenValidationParameters { // ValidIssuer = _appConfiguration["Tokens:Issuer"], // ValidAudience = _appConfiguration["Tokens:Issuer"], // IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appConfiguration["Tokens:Key"])), ValidateIssuerSigningKey = true, ValidateAudience = false, ValidateIssuer = false, IssuerSigningKeys = new List<SecurityKey> { signingKey }, ValidateLifetime = true, }; services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { options.Authority = ""; options.Audience = ""; options.RequireHttpsMetadata = false; options.IncludeErrorDetails = true; options.TokenValidationParameters = tokenValidationParameters; options.Events = new JwtBearerEvents { OnAuthenticationFailed = c => { c.NoResult(); c.Response.StatusCode = 404; c.Response.ContentType = "text/plain"; return c.Response.WriteAsync(c.Exception.ToString()); } }; }).AddCookie(options => { options.LoginPath = "/SignIn/SignInAsync/"; options.Cookie.Domain = ""; options.Cookie.HttpOnly = false; }); 我们是在Startup中用拦截器中弄得这个,不知道适不适合你们
拦截了 {"StatusCode cannot be set because the response has already started."}