2014-09-13 259 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); 
}