mvcaction過濾
Ⅰ MVC4 過濾器使用和怎樣控制全部action和部分action
讓一個Controller中的所有Action都執行這個過濾器就需要對裡面的方法進行重寫
public class LoginController : Controller
{
//
// GET: /Login/
public ActionResult Index()
{
return View();
}
public ActionResult Login()
{
string name = HttpContext.Request["UserName"];
ViewData["name"] = name;
return View();
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//object[] attrs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoFilter), true);
//if (attrs.Length == 1)//有NoFilter屬性
//{
// return;
//}
string name = filterContext.HttpContext.Request["UserName"];
if (string.IsNullOrEmpty(name))
{
filterContext.HttpContext.Response.Write("<script>alert('名稱不能為空!');</script>");
filterContext.HttpContext.Response.End();
}
}
}
View Code
這樣每個action在執行前都會先執行這個過濾器。
下面是怎樣讓Index的Action不執行,只是對Login執行。有2種方式實現:
第一種:代碼修改如下:
public class LoginController : Controller
{
//
// GET: /Login/
[NoFilter]
public ActionResult Index()
{
return View();
}
public ActionResult Login()
{
string name = HttpContext.Request["UserName"];
ViewData["name"] = name;
return View();
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//過濾掉標有NoFilter標簽的Action
object[] attrs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoFilter), true);
if (attrs.Length == 1)//有NoFilter屬性
{
return;
}
string name = filterContext.HttpContext.Request["UserName"];
if (string.IsNullOrEmpty(name))
{
filterContext.HttpContext.Response.Write("<script>alert('名稱不能為空!');</script>");
filterContext.HttpContext.Response.End();
}
}
}
public class NoFilter : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//
}
}
View Code
第二種:代碼修改如下:
public class LoginController : Controller
{
//
// GET: /Login/
public ActionResult Index()
{
return View();
}
[LoginFilter]
public ActionResult Login()
{
string name = HttpContext.Request["UserName"];
ViewData["name"] = name;
return View();
}
//protected override void OnActionExecuting(ActionExecutingContext filterContext)
//{
// //過濾掉標有NoFilter標簽的Action
// object[] attrs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoFilter), true);
// if (attrs.Length == 1)//有NoFilter屬性
// {
// return;
// }
// string name = filterContext.HttpContext.Request["UserName"];
// if (string.IsNullOrEmpty(name))
// {
// filterContext.HttpContext.Response.Write("<script>alert('名稱不能為空!');</script>");
// filterContext.HttpContext.Response.End();
// }
//}
}
public class LoginFilter : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
string name = filterContext.HttpContext.Request["UserName"];
if (string.IsNullOrEmpty(name))
{
filterContext.HttpContext.Response.Write("<script>alert('名稱不能為空!');</script>");
filterContext.HttpContext.Response.End();
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//
}
}
View Code
補充:1.自定義過濾器Filter必須繼承FilterAttribute。
2.定義過個過濾器可以定義過濾器執行的先後順序 例如: 在Action上標注:
[NoFilter(Order=2)]
[LoginFilter(Order=1)]
這樣當執行這個Action時候會先執行LoginFilter 再執行NoFilter。
Ⅱ MVC過濾器,怎麼排除某個Action不使用Controller下的過濾器
當ActionInvoker在執行目標Action方法之前,會根據Order和Scope屬性對用於封裝ActionFilter的Filter對象進行排序。
然後根據當前ControllerContext和ActionDescriptro創建一個ActionExecutingContext對象,並將其作為參數依次調用所有ActionFilter的OnActionExecuting方法。
在這之後真正的目標Action方法被執行,ActionInvoker隨後執行後續的篩選操作。具體來說,它根據當前ControllerContext、ActionDescriptro以及Action方法執行過程中拋出的異常創建一個ActionExecutedContext對象。該ActionExecutedContext的Cancel屬性為False,如果Action方法返回一個ActionResult對象,該對象將會作為該ActionExecutedContext的Result屬性。
接下來按照相反的次序依次調用ActionFilter對象的OnActionExecuted方法,執行過程中的ActionFilter可以修改ActionExecutedContext的Result屬性。當整個ActionFilter鏈執行結束之後,ActionExecutedContext的Result屬性返回的ActionResult將會作為對當前請求的響應。右圖基本上反映了連同目標Action在內的整個ActionFilter鏈的執行過程。
Ⅲ C# MVC Filter過濾器如何停止往下執行
你這是開發mvc可不是開發asp,什麼年代了還Response.Write呢?
設置filterContext的Result為一個ViewResult來阻止執行Action
Ⅳ spring+springmvc+mybatis框架過濾一個.action的過濾器怎麼寫
<filter>
<filter-name>FntUploadLogin</filter-name>
<filter-class>platform.kshxx.app.ssdmt.filters.FntUploadLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>FntUploadLogin</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
試試
Ⅳ MVC 怎麼讓某個Action 不執行過濾器
--解決思路----------------------
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
}
Ⅵ mvc中的action過濾器有哪些
MVC支持的過濾器類型有四種,分別是:Authorization(授權),Action(行為),Result(結果)和Exception(異常)。如下表,
Ⅶ asp.net MVC中 Action有哪三種,區別是什麼,請清楚一些,謝謝
filterAction 主要用於攔截、ExecuteAction 處理異常的、AuthorAction授權的
至於NonAction標識這個方法不是Action方法;ChildActionOnly用於指示操作方法只應作為子操作進行調用
Ⅷ ASP.NET MVC3 ActionFilterAttribute參數傳遞問題
可以,可以參考
AuthorizeAttribute的寫法
[Authorize("User")] [Authorize(「Admin")]
這樣去傳參
當然也可以隱藏這一過程,根據User信息去資料庫讀取
Ⅸ 如何設置過濾器過濾action
c過濾器可抄以配置只攔截某個襲請求,當然你也可以在過濾器中判斷該url是否需要你過濾的。
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>a.jsp</url-pattern>
</filter-mapping>