【问题标题】:how can i get model object in exceptionFilter Asp.NetCore?如何在异常过滤器 Asp.Net Core 中获取模型对象?
【发布时间】:2018-12-02 17:55:58
【问题描述】:

我正在使用 ASP .NET Core 2.0 中的 WEB 应用程序,其中我有一个继承自 ExceptionFilterAttribute 的自定义 ExceptionAttribute 过滤器。

如何访问传递给 POST 调用中的操作的模型对象。

上述方法传递了一个 ExceptionContext,但我找不到一种简单可靠的方法来从中获取模型对象并传递给 ViewResult。

我拥有的过滤器如下所示:

public class ApiCallExceptionAttribute: ExceptionFilterAttribute
{
    private readonly IModelMetadataProvider _modelMetadataProvider;

    public ApiCallExceptionAttribute(
        IModelMetadataProvider modelMetadataProvider)
    {
        _modelMetadataProvider = modelMetadataProvider;
    }

    public override void OnException(ExceptionContext context)
    {
        //how can i accesss model object here and pass to ViewResult
        result.ViewData = new ViewDataDictionary(_modelMetadataProvider,context.ModelState);

        context.Result = result;
    }
}

控制器如下所示:

[HttpPost]
[ServiceFilter(typeof(ApiCallExceptionAttribute))]
public async Task<IActionResult> Activation(ActivationViewModel model)
{
            //throw exception in controller content
}

【问题讨论】:

  • 这方面有什么进展吗?

标签: c# asp.net-core exception-handling


【解决方案1】:

找不到任何简单的方法来做到这一点。

我将采取的方法是在您的班级上也实施IActionFilter

读取onActionExecuting()中的模型信息并将其存储在HTTPContext.Items中。

然后在出现异常时从HttpContext.Items读取。

不要急于将此信息作为私有字段存储在您的类中,因为 MVC 不会为每个请求创建其过滤器的新实例!

 public class LogExceptionFilterAttribute : Attribute, IExceptionFilter, IActionFilter
    {

        public void OnActionExecuting(ActionExecutingContext context)
        {
            context.HttpContext.Items["ActionArguments"] = context.ActionArguments;
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
        }

        public void OnException(ExceptionContext context)
        {
            var model = context.HttpContext.Items["ActionArguments"];
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多