从AuthorizationContext执行Controller Action

时间:2014-09-13 16:28:56

标签: asp.net-mvc asp.net-mvc-5

我在全球范围内使用RequireHttpsAttribute。虽然不应该使用https,但有一个控制器操作。除了删除全局设置并在任何地方添加RequireHttps之外,我决定将它排除在外可能更容易。

所以我继承自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会起作用,但不幸的是它导致了重定向循环。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

var controller = filterContext.Controller as FooController;

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

答案 1 :(得分:0)

我发现我必须这样做:

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