简而言之:有没有人知道从基本控制器获取应用于当前执行操作的actionFilters列表的方法?
长: 我正在使用ASP.NET MVC 1.0框架。我有一个“RequireSSL”actionFilter,我已经重新创建用于检出,但是,如果有人离开结账并返回商店,我想将它们转发回非安全版本的网站。
在基本控制器(我使用继承自默认控制器的自定义基本控制器)中找出当前操作应用的actionFilters是有帮助的。
我可以将它包含在global.asax.cs中我想,这里的任何指导都会受到赞赏。
由于
答案 0 :(得分:3)
您可以创建一个ActionFilter并实现OnActionExecuting。通过此属性,您可以重定向它们。
public sealed class MyRedirectAttributeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.ActionDescriptor.IsDefined(typeof(RequireSSLAttribute), true))
{
filterContext.HttpContext.Response.Redirect("~/Controller/Action");
}
base.OnActionExecuting(filterContext);
}
}true
答案 1 :(得分:1)
嗯,这就是我结束的......
public sealed class HandleConnectionSecurityAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
HttpResponseBase res = filterContext.HttpContext.Response;
if (!filterContext.ActionDescriptor.IsDefined(typeof(RequiresSSL), true) && HttpContext.Current.Request.IsSecureConnection)
{
var builder = new UriBuilder(req.Url)
{
Scheme = Uri.UriSchemeHttp,
Port = 80
};
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
然后我在我创建的SuperController中添加了一个action属性。
[HandleConnectionSecurity]
公共类SuperController:Controller