我正在使用ASP .NET Core 2.0中的WEB API应用程序,其中我有一个继承自ActionFilterAttribute
的自定义过滤器属性。
如何在ActionFilterAttribute.OnResultExecuted()
上面提到的方法传递了一个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();
}
}
答案 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"];
希望这意味着你的意思。 感谢