我在全球范围内使用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
会起作用,但不幸的是它导致了重定向循环。
答案 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);
}