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)
找不到任何简单的方法来做到这一点。
我将采取的方法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)
归档时间: |
|
查看次数: |
383 次 |
最近记录: |