如何在ActionFilterAttribute.OnResultExecuted中访问Model对象?

时间:2018-01-25 12:18:21

标签: c# asp.net-web-api asp.net-core-2.0

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

如何在ActionFilterAttribute.OnResultExecuted()

中访问传递给POST调用中的控制器操作的Model对象

上面提到的方法传递了一个ResultExecutedContext对象,但我找不到一种简单可靠的方法来从中获取Model对象。

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

public sealed class MyCustomFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        base.OnActionExecuted(context);
    }
    public override void OnResultExecuted(ResultExecutedContext context)
    {
        var model = ????????????? 
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        base.OnResultExecuting(context);
    }
}

,控制器如下所示:

[Route("api/[controller]")]
public class MyController : Controller
{
    [ServiceFilter(typeof(MyCustomFilter))]
    [HttpPost]
    public async Task<IActionResult> Post([FromBody] List<MyModel> data)
    {
        // my logic to process model here. In my filter, I want to access data, which is passed into this Post method 

        return Ok();
    }
}

1 个答案:

答案 0 :(得分:0)

我在控制器中设置了私有var,并在控制器操作

上为其分配了已发布的模型
 private YourModel _yourModel;

 public ActionResult MyAction(YourModel model)
 {
      _yourModel = model;
       return View();
 }

 protected override void OnResultExecuted(ResultExecutedContext filterContext)
 {
       //Access _yourModel here     
 }

要从传入的filterContext参数访问模型,可以使用下面的

var model = ((Controller)filterContext.Controller).ViewData.Model;

尝试使用TempData。将tempdata设置为动作中的模型。

 TempData["Model"] = myModel;

然后在上下文中使用TempData进行访问。

var x = ((Controller)filterContext.Controller).TempData["Model"];

希望这意味着你的意思。 感谢