当您直接调用控制器方法时,您将如何调用 ActionFilterAttribute?想象一下:
public class ApiController : Controller {
public ActionResult CallSomething() {
return IsCalled();
}
[MyAction]
public ActionResult IsCalled() {
return View();
}
}
因此请求进入/Api/CallSomething
,CallSomething() 方法在内部调用另一个方法(在本例中为 IsCalled()),但是当调用该方法时,ActionFilterAttribute 被调用并运行。
目前 ActionFilterAttribute 只有在它是原始请求的一部分时才会被调用,这是有道理的,因为它是整个 MVC 生命周期的一部分,我所做的只是直接调用一个方法,我需要做一个 RedirectToAction如果我想让它被 MVC 解雇。RedirectToAction 会更改 URL,因此这不适合我的目的。
我已经查看了 System.Web.Mvc 代码,但看不到它是如何或何时被调用的。我认为如果它可以做到,那么我也可以使用反射。在这种情况下,视图不相关,因为我重写了 ExecuteResult() 以将我自己的内容写入 http 响应。
无论如何,我已经让自己接受了这可能是不可能的,但我只是认为这值得一试。