public class FormValueRequiredAttribute : ActionMethodSelectorAttribute { private readonly string[] _submitButtonNames; private readonly FormValueRequirement _requirement; public FormValueRequiredAttribute(params string[] submitButtonNames): this(FormValueRequirement.Equal, submitButtonNames) { } public FormValueRequiredAttribute(FormValueRequirement requirement, params string[] submitButtonNames) { //at least one submit button should be found this._submitButtonNames = submitButtonNames; this._requirement = requirement; } public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) { foreach (string buttonName in _submitButtonNames) { try { string value = ""; switch (this._requirement) { case FormValueRequirement.Equal: { //do not iterate because "Invalid request" exception can be thrown value = controllerContext.HttpContext.Request.Form[buttonName]; } break; case FormValueRequirement.StartsWith: { foreach (var formValue in controllerContext.HttpContext.Request.Form.AllKeys) { if (formValue.StartsWith(buttonName, StringComparison.InvariantCultureIgnoreCase)) { value = controllerContext.HttpContext.Request.Form[formValue]; break; } } } break; } if (!String.IsNullOrEmpty(value)) return true; } catch (Exception exc) { //try-catch to ensure that Debug.WriteLine(exc.Message); } } return false; } } public enum FormValueRequirement { Equal, StartsWith }
public class FormValueExistsAttribute : FilterAttribute, IActionFilter { private readonly string _name; private readonly string _value; private readonly string _actionParameterName; public FormValueExistsAttribute(string name, string value, string actionParameterName) { _name = name; _value = value; _actionParameterName = actionParameterName; } public void OnActionExecuted(ActionExecutedContext filterContext) { } public void OnActionExecuting(ActionExecutingContext filterContext) { var formValue = filterContext.RequestContext.HttpContext.Request.Form[_name]; filterContext.ActionParameters[_actionParameterName] = !string.IsNullOrEmpty(formValue) && formValue.ToLower().Equals(_value.ToLower()); } }