首先我們來看下 這兩個ActionFilterAttribute 的命名空間區別的:
可以看出mvc 引用的是System.Web.Mvc,webapi 引用的是System.Web.Http.Filters ,不知道小伙伴們有看出來別的區別沒有,對的,有的 ,虛方法傳入類不同,這樣導致傳入構造與輸出構造也將不同了。
這里看下這兩個如何攔截的吧,先說下mvc 的:
//OnActionExecuting在被攔截Action前執行
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.HttpContext.Response.Write("Action執行之前"+Message+"<br />");
}
呀。。特碼的,你會發現..web api 的玩的不一樣,它是繼承Http 的
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
}
那如果需要攔截的話,怎么攔截返回呢?
其實很簡單,只需要調用http返回狀態值,即可攔截不會再往方法內部走了
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
//此處暫時以401返回,可調整為其它返回
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
//actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
base.OnActionExecuting(actionContext);
}