グローバルフィルタで指定したControllerとactionメソッドを除外する(2)
7679 ワード
前の文は1種の方式を貼ってControllerとactionの方法を排除して、しかしあまり実用的ではありませんて、もし多くのコントローラに出会って、多くの方法、識別しにくいならば、今日私は1種の方式を紹介して、ラベルを加えて、この方法は比較的に簡単で、あなたも好きになることを信じて、面倒なのは、グローバルフィルタごとにそのグローバルフィルタを有効にしないラベルに対応することですが、機能を実現するためには、しばらくは気にしないでください.
まず、内部には何も書かずに識別、占有の識別として機能します.
次に、グローバルフィルタで除外するコントローラまたはフィルタにこのラベルを貼ります.
このように...
最後に、書き込みフィルタです.圧縮フィルタを例に挙げます.
次に、前述のようにグローバルフィルタを追加します.
よし、大功を成し遂げた.
まず、内部には何も書かずに識別、占有の識別として機能します.
1 /// <summary>
2 ///
3 /// </summary>
4 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
5 public class NoCompress : Attribute
6 {
7 public NoCompress()
8 {
9 }
10 }
次に、グローバルフィルタで除外するコントローラまたはフィルタにこのラベルを貼ります.
1 [NoCompress]
2 public ActionResult Contact()
3 {
4 ViewBag.Message = " 。";
5
6 return this.View();
7 }
8
9 [NoCompress]
10 public ActionResult Grid()
11 {
12 return this.View();
13 }
このように...
最後に、書き込みフィルタです.圧縮フィルタを例に挙げます.
/// <summary>
///
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
object[] actionFilter = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoCompress), false);
object[] controllerFilter = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(NoCompress), false);
if (controllerFilter.Length == 1 || actionFilter.Length == 1)
{
return;
}
HttpRequestBase request = filterContext.HttpContext.Request;
HttpResponseBase response = filterContext.HttpContext.Response;
string acceptEncoding = request.Headers["Accept-Encoding"].ToLower();
if (string.IsNullOrEmpty(acceptEncoding))
{
return;
}
if (acceptEncoding.Contains("gzip"))
{
response.Filter = new GZipStream(response.Filter, compress);
response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
response.Filter = new DeflateStream(response.Filter, compress);
response.AppendHeader("Content-Encoding", "deflate");
}
}
次に、前述のようにグローバルフィルタを追加します.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CompressFilterAttribute());
}
よし、大功を成し遂げた.