2012-06-22 64 views
0

我想爲單個頁面使用https而不是整個網站。 我的應用程序是在MVC3中。我用下面的代碼來完成這個。總是需要https到一個特定的路線,而不是整個網站

[RequireHttps] 
public ViewResult YourAction() 

但路由到我的特定行動後,整個網站運行在https下。 我想爲單個頁面使用https而不是整個網站。

+2

http://stackoverflow.com/questions/7846833/why-once-ssl-is-enabled-with-requirehttps-at-action-level-it-remains-enabled –

+0

我沒有得到正確的回答,在鏈接中的示例中,如果我想要/或不想使用https,則必須在每個操作中編寫該屬性。任何人都可以提供更好的方法。 –

+0

爲什麼不讓它在SSL下運行?就像Chuck Norris所說的那樣,在通過SSL做某些事情之後,通常情況下它真的錯誤地切換回未加密。 – Tim

回答

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; 
     } 
} 
相關問題