2010-06-18 40 views
4

我有一臺運行IIS 6的網絡服務器,.NET MVC只有一個域名。該網站將使用URL重寫產生類似的網址:.NET-MVC - 通過SSL重寫URL的某些URL?

domain.com/controller/action

我想迫使一(1)控制器使用SSL(其他應無SSL工作)。 我應該如何實施?

回答

4

裝飾與RequireHttpsAttribute需要SSL的控制器。

[RequireHttps] 
public class SecureController : Controller 
{ 
    ... 
} 

雖然,你可能更喜歡,如果您使用卡西尼調試忽略此爲本地請求的定製版本。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class RemoteRedirectToHttpsAttribute : RequireHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (filterContext.HttpContext != null && (filterContext.HttpContext.Request.IsLocal || filterContext.HttpContext.Request.IsSecureConnection)) 
     { 
      return; 
     } 

     filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("http:", "https:")); 
    } 
} 
+0

我已經使用自定義RequireSSL屬性。但是我的網站(IIS)尚未安裝SSL。而且我只能通過爲整個網站設置「目錄安全性」進行設置。或者,這**不會自動禁用正常的'http'請求? – Ropstah 2010-06-18 21:12:25

+0

@ropstah - 如果您在控制器/操作(不是本地連接)上使用此屬性,它將重定向到安全請求。另外,你應該注意到最初的請求確實應該是GET,而不是POST。如果對受保護操作的第一個請求是POST,它將不起作用,因爲重定向將是對同一個網址的GET(除了使用https)。 – tvanfosson 2010-06-18 21:34:28

+0

我明白你的意思了,沒有問題。但是我真正的問題可能是在IIS中設置SSL。 '設置SSL'意味着'正常'的'http'(是的,不是'https')請求仍然可以用於網站嗎? (除了屬性控制器當然..) – Ropstah 2010-06-18 21:42:00

0

您可以使用RequireHttps屬性註釋需要SSL的控制器,或者讓它們從標有該屬性的基本控制器派生。