首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.NET核心3.1中的全局异常自定义筛选器显示错误模式?

如何使用.NET核心3.1中的全局异常自定义筛选器显示错误模式?
EN

Stack Overflow用户
提问于 2020-04-23 16:50:08
回答 1查看 155关注 0票数 0

我实现了以下全局自定义异常筛选器:

代码语言:javascript
复制
public class ExceptionCustomFilter : IExceptionFilter
{
    private readonly IWebHostEnvironment _hostingEnvironment;
    private readonly IModelMetadataProvider _modelMetadataProvider;
    private readonly IHttpContextAccessor _httpContextAccessor;

    public ExceptionCustomFilter(
        IWebHostEnvironment hostingEnvironment,
        IModelMetadataProvider modelMetadataProvider,
        IHttpContextAccessor httpContextAccessor)
    {
        _hostingEnvironment = hostingEnvironment;
        _modelMetadataProvider = modelMetadataProvider;
        _httpContextAccessor = httpContextAccessor;
    }

    public void OnException(ExceptionContext filterContext)
    {
        //Redirect to global handler
        filterContext.Result = new ViewResult();
        {
            ViewName = "Error"
        };
        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
    }
}

我在Startup ConfigureServices()方法中添加了以下代码:

代码语言:javascript
复制
services.AddControllersWithViews(options =>
{
    options.Filters.Add(typeof(ExceptionCustomFilter));
});
services.AddMvc(options =>
{
    options.EnableEndpointRouting = false;
    options.Filters.Add(typeof(ExceptionCustomFilter));
}); 

我想让我的"Error“视图(它目前在我的视图>共享文件夹中找到)在每次ExceptionFilter捕获任何异常时作为一个模式弹出。

我现在的"Error.cshtml“视图:

代码语言:javascript
复制
// Render styles

<script type="text/javascript">
    $(function () {
        $('#modalError').modal('show');
    });
</script>

<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <div class="error">
                <i class="icon-erro fa fa-exclamation-circle" aria-hidden="true"></i>
                <h2> Error </h2>
            </div>
        </div>

        <div class="modal-body">
            <div class="error">
                <p>
                    // content
                </p>
            </div>
        </div>
    </div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 15:24:38

更新:我设法弄清楚了,显然有些div ids丢失了,我返回的是一个ViewResult而不是一个PartialViewResult.

以下是完整的代码:

在我的自定义异常过滤器中

代码语言:javascript
复制
public void OnException(ExceptionContext filterContext)
{
    var logErroService = new LogErroService(filterContext.HttpContext);
    logErroService.Create(filterContext.Exception);
    if (IsAjaxRequest(filterContext.HttpContext.Request))
    {
        // Displays the error message as a modal
        filterContext.Result = new PartialViewResult()
        { 
            ViewName = "_ModalError"
        };
        filterContext.ExceptionHandled = true; 
        filterContext.HttpContext.Response.Clear();
    }
    else
    {
        // Displays the error message as a HTML Page
        filterContext.Result = new ViewResult()
        {
            ViewName = "_Error"
        };
        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
    }
}

我的_Error.cshtml视图:

代码语言:javascript
复制
@{
    Layout = null;
}

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <!--Local-->
    // Import styles and scripts

    <title>Ops, an error has ocurred!</title>
</head>
<body>
    <div class="error">
        <i class="icon-erro fa fa-exclamation-circle" aria-hidden="true"></i>
        <h2>Error</h2>
    </div>
</body>
</html>

当错误来自AJAX请求时称为ONLY的:

代码语言:javascript
复制
<!-- Local -->
// Import styles and scripts

<script type="text/javascript">
    $(function () {
        $('#ModalError').modal();
    });
</script>

<div class='modal fade' id='ModalError'>
    <div id='divModalErrorBody'>

        <div class="modal-dialog" role="document">
            <div class="modal-content">

                <div class="modal-body">
                    <button type="button" class="close" data-dismiss="modal">
                            <span aria-hidden="true">×</span>
                            <span class="sr-only">Exit</span>
                    </button>

                    <div class="error-modal">
                        <i class="icon-erro fa fa-exclamation-circle" aria-hidden="true"></i>
                        <h2> Error </h2>
                    </div>
                </div>

            </div>
        </div>

    </div>
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61392641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档