Смысл ActionFilterAttribute
в том, что вы можете применить их к любым действиям, которые вы хотите. Или, другими словами, вам не нужно применять их ко всем действиям.
Если вы не хотите, чтобы логика атрибута вводилась в действие, просто не применяйте атрибут к нему. Например:
public class SomeController : Controller {
[RequireHttps]
public ActionResult SomeAction() {
//the attribute's logic will be injected to this action.
return View();
}
public ActionResult SomeOtherAction() {
//this action doesn't require https protocol
return View();
}
}
Если вы примените атрибут к самому контроллеру, то он будет применен к всем действиям в контроллере.
Редактировать :
Чтобы требовать протокол http вместо https, я думаю, вы можете использовать атрибут ниже. Я дважды проверю, есть ли у MVC 2 это уже. Но если это не (Это не так):
public class RequireHttp : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.HttpContext.Request.IsSecureConnection) {
UriBuilder builder = new UriBuilder() {
Scheme = "http",
Host = filterContext.HttpContext.Request.Url.Host,
Path = filterContext.HttpContext.Request.RawUrl
};
filterContext.Result = new RedirectResult(builder.ToString());
filterContext.Result.ExecuteResult(filterContext);
}
base.OnActionExecuting(filterContext);
}
}