如何在异常过滤器 Asp.NetCore 中获取模型对象?



我正在使用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
}

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

我会采取的方法是在你的班级上实现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"];
}
}

最新更新