음, 나는 마지막으로 가장 고통 방법을 증명 내 원래의 게시물에 코멘트에 설명 된 솔루션을 선택했다.
public class ExitHttpsIfNotRequiredAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
// abort if it's not a secure connection
if (!filterContext.HttpContext.Request.IsSecureConnection) return;
// abort if a [RequireHttps] attribute is applied to controller or action
if (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
// abort if a [RetainHttps] attribute is applied to controller or action
if (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute), true).Length > 0) return;
if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute), true).Length > 0) return;
// abort if it's not a GET request - we don't want to be redirecting on a form post
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) return;
// redirect to HTTP
string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
}
public class RetainHttpsAttribute:FilterAttribute{}
ExitHttpsIfNotRequired
속성을 장식하는 데 사용할 수 있습니다
그냥이 기본적으로 코드입니다 (난 그냥 빠른 참조 여기를 다시 게시하고, 코드에 대한
누가 복음 Sampsons 모든 신용)를 요약합니다 웹 응용 프로그램의 모든 컨트롤러를 파생시키는 데 사용되는 기본 컨트롤러 클래스입니다.
HttpsNotRequired 특성을 반복하지 않으려면베이스 컨트롤러를 꾸미기 위해 사용할 수 있습니다. 그래도 더 멋진 솔루션이 있는지 궁금해하고 있습니다. – eddo