我正在使用ASPWebCore2.0中的.NET应用程序,其中有一个继承自ExceptionFilterAttribute的自定义ExceptionAttribute筛选器。
如何访问在POST调用中传递给操作的Model对象。
上面提到的方法被传递了一个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
}发布于 2020-06-06 11:12:32
找不到简单的方法来做到这一点。
我将采用的方法是在您的类上也实现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"];
}
}https://stackoverflow.com/questions/51001755
复制相似问题