我有一臺運行IIS 6的網絡服務器,.NET MVC只有一個域名。該網站將使用URL重寫產生類似的網址:.NET-MVC - 通過SSL重寫URL的某些URL?
domain.com/controller/action
我想迫使一(1)控制器使用SSL
(其他應無SSL工作)。 我應該如何實施?
我有一臺運行IIS 6的網絡服務器,.NET MVC只有一個域名。該網站將使用URL重寫產生類似的網址:.NET-MVC - 通過SSL重寫URL的某些URL?
domain.com/controller/action
我想迫使一(1)控制器使用SSL
(其他應無SSL工作)。 我應該如何實施?
裝飾與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:"));
}
}
您可以使用RequireHttps屬性註釋需要SSL的控制器,或者讓它們從標有該屬性的基本控制器派生。
我已經使用自定義RequireSSL屬性。但是我的網站(IIS)尚未安裝SSL。而且我只能通過爲整個網站設置「目錄安全性」進行設置。或者,這**不會自動禁用正常的'http'請求? – Ropstah 2010-06-18 21:12:25
@ropstah - 如果您在控制器/操作(不是本地連接)上使用此屬性,它將重定向到安全請求。另外,你應該注意到最初的請求確實應該是GET,而不是POST。如果對受保護操作的第一個請求是POST,它將不起作用,因爲重定向將是對同一個網址的GET(除了使用https)。 – tvanfosson 2010-06-18 21:34:28
我明白你的意思了,沒有問題。但是我真正的問題可能是在IIS中設置SSL。 '設置SSL'意味着'正常'的'http'(是的,不是'https')請求仍然可以用於網站嗎? (除了屬性控制器當然..) – Ropstah 2010-06-18 21:42:00