始终需要Https到特定路线而不是整个网站

时间:2012-06-22 06:33:31

标签: asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-3-areas

我想将https用于单个页面而不是整个网站。 我的应用程序是在MVC3中。我用下面的代码来完成这个。

[RequireHttps]
public ViewResult YourAction()

但在路由到我的特定操作后,整个网站都在https下运行。 我想将https用于单个页面而不是整个网站。

1 个答案:

答案 0 :(得分:0)

我使用下面的代码完成了它。

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new LimitHttpsAttribute());
            }

 public class LimitHttpsAttribute : IAuthorizationFilter
    {
        private static Type ssl = typeof(RequireHttpsAttribute);

        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }
            if (filterContext.HttpContext != null && filterContext.HttpContext.Request != null)
            {
                if (!filterContext.HttpContext.Request.IsSecureConnection ||
                    filterContext.HttpContext.Request.IsAuthenticated)
                {
                    return;
                }
                if (!RequiresSSL(filterContext))
                {
                    filterContext.Result = Unencrypted(filterContext.HttpContext.Request);
                }
            }
        }

        private bool RequiresSSL(AuthorizationContext filterContext)
        {
            return filterContext.ActionDescriptor != null ?
                filterContext.ActionDescriptor.GetCustomAttributes(ssl, true).Length > 0
                : false;
        }
}