处理401,404和500错误的自定义页面

时间:2018-04-12 02:05:31

标签: .net-core asp.net-core-mvc-2.0

逗人,

我的要求是使用自定义错误页面处理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

0 个答案:

没有答案