逗人,
我的要求是使用自定义错误页面处理401,404和500服务器错误。 我有一个解决方案,但我正在寻求您的专业知识,以选择最佳和最好的方式来处理这个问题。
应用技术堆栈。
我的应用程序是使用Aurelia和.NET核心构建的SPA应用程序。
使用案例
当用户直接点击浏览器上的地址时,它首先会因为尚未加载SPA而点击服务器,并且无法处理客户端路由。
我已实施的解决方案。
我已经实现了一个中间件来处理所需的错误响应
private async Task StaticErrorPageHandler(HttpContext context, Func<Task> next)
{
try
{
await next();
var statusCode = context.Response.StatusCode;
var path = GetPathByStatusCode(statusCode.ToString());
string content;
switch (statusCode)
{
case StatusCodes.Status401Unauthorized:
content = ReadFileContnet(path);
await context.Response.WriteAsync(content);
break;
case StatusCodes.Status404NotFound:
content = ReadFileContnet(path);
await context.Response.WriteAsync(content);
break;
case StatusCodes.Status500InternalServerError:
content = ReadFileContnet(path);
await context.Response.WriteAsync(content);
break;
}
}
catch (Exception ex)
{
_loggingService.LogError<PortalStartupBase>(LogCategory.General, ex);
throw;
}
}
我已将其注册为我的应用程序管道配置的第一个配置中间件。 (这样,我得到附加到contex.response对象的状态代码)
public virtual void Configure(IApplicationBuilder app, IApplicationLifetime lifetime, IHostingEnvironment hostingEnvironment)
{
// configure middleware
app.Use(StaticErrorPageHandler);
...
}
所以我的问题是,通过将首选内容写入context.response而不是将管道短路,我们可以重定向到专用的错误控制器吗? 像:
case StatusCodes.Status401Unauthorized:
await context.Response.redirect("error/");
break;
如果您需要更多信息,请随时与我联系。
感谢您在这方面的反馈。
~RSF