Search code examples
asp.net-mvc-3asp.net-mvc-routingasp.net-mvc-3-areas

Always need Https to a particular route not for whole website


I want to use https for a single page instead of whole website. My application is in MVC3. I have used below code to accomplish this.

[RequireHttps]
public ViewResult YourAction()

But after routing to my particular action, the whole website runs under https. I want to use https for a single page not for whole website.


Solution

  • I have done it using below code.

        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;
            }
    }