[RegExPreconditionFilter(RouteParam = "id", RegExPattern = "^[1-9][0-9]*$", ErrorUrl = "/Home/Error")]
[PredicatePreconditionFilter(RouteParam = "id", PredicateMethod = "IsGreaterThanZero", ErrorUrl = "/Home/Error")]
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
public void Index()
RenderView("Index");
}
[RegExPreconditionFilter(RouteParam = "id", RegExPattern = "^[2-9][0-9]*$", ErrorUrl = "/Home/Error")]
public void Company()
RenderView("Company");
[PredicatePreconditionFilter(RouteParam = "id", PredicateMethod = "IsGreaterThanOne", ErrorUrl = "/Home/Error")]
public void Employee()
RenderView("Employee");
public void Error()
RenderView("Error");
protected bool IsGreaterThanZero(object value)
try
int id = Convert.ToInt32(value);
return id > 0;
catch
return false;
protected bool IsGreaterThanOne(object value)
return id > 1;
using System.Text.RegularExpressions;
namespace MvcApplication1
[System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Interface,
AllowMultiple = true)]
public class RegExPreconditionFilter : ActionFilterAttribute
public string RouteParam { get; set; }
public string RegExPattern { get; set; }
public string ErrorUrl { get; set; }
public override void OnActionExecuting(FilterExecutingContext filterContext)
//redirect if invalid
if (!filterContext.RouteData.Values.ContainsKey(RouteParam)
|| filterContext.RouteData.Values[RouteParam].ToString().Length == 0
|| !Regex.IsMatch(filterContext.RouteData.Values[RouteParam].ToString(), RegExPattern))
filterContext.HttpContext.Response.Redirect(ErrorUrl);
public class PredicatePreconditionFilter : ActionFilterAttribute
public string PredicateMethod { get; set; }
Predicate<object> predicate = (Predicate<object>)Delegate.CreateDelegate(typeof(Predicate<object>), filterContext.Controller, PredicateMethod);
|| filterContext.RouteData.Values[RouteParam] == null
|| !predicate(filterContext.RouteData.Values[RouteParam]))
Remember Me
Powered by: newtelligence dasBlog 1.8.5223.2
© Copyright 2008, Troy DeMonbreun
E-mail