2014-09-13 273 views
0

我在全球范围内使用RequireHttpsAttribute。有一个控制器操作,但不应该使用https。我并没有删除全局设置,而是在其他地方添加了RequireHttps,但我认为排除它可能更容易。从AuthorizationContext执行控制器操作

所以我从RequireHttpsAttribute继承了这么远:

public class MyRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     string controller = filterContext.RequestContext.RouteData.GetRequiredString("controller"); 
     string action = filterContext.RequestContext.RouteData.GetRequiredString("action"); 

     if (controller == "Foo" && action == "Bar") 
     { 
      filterContext.Result = ???; 
     } 
     else 
     { 
      base.HandleNonHttpsRequest(filterContext); 
     } 
    } 
} 

我不知道我怎么可以手动触发动作。我认为使用RedirectToRouteResult会起作用,但不幸的是它会导致重定向循环。

+0

你想重定向到一些动作你如果条件??? – 2014-09-13 16:35:39

+0

是的。基本上我想忽略该特定控制器/操作对的属性 – 2014-09-13 16:39:10

回答

0

你可以试试这个:

var controller = filterContext.Controller as FooController; 

if(controller != null) { 
    filterContext.Result = controller.Bar(); 
} 
else { 
    // handle and maybe figure out why its null 
} 
0

我发现,我必须这样做:

if (controller == "Foo" && action == "Bar") 
{ 
    // Do nothing. This will make execution continue as normal 
} 
else 
{ 
    base.HandleNonHttpsRequest(filterContext); 
}