如何在 exceptionFilter Asp.NetCore 中获取模型对象?

Moh*_*asi 6 c# exception-handling asp.net-core

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

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

提到的方法传递了一个 ExceptionContext,但我找不到一种简单可靠的方法来从中获取 Model 对象并传递给 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器如下所示:

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

rep*_*iau 0

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

我将采取的方法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"];
        }
    }
Run Code Online (Sandbox Code Playgroud)