2011-05-12 106 views
2

我在我的MVC2應用程序中使用[RequireHttps],但在我的測試機器中,SSL URL與實際站點URL不同(它是共享SSL環境)。ASP.NET MVC - RequireHttps - 指定重定向URL

例如: 我的網站的網址是http://my-domain.com,SSL網址是https://my-domain.sharedssl.com

當控制器/操作需要HTTPS(最好在Web.config文件中)時,有沒有辦法告訴MVC重定向到該URL?

謝謝。

+0

這種重定向通常在負載平衡器級別處理;你確定你的應用程序需要它嗎? – 2013-11-01 18:17:57

回答

2

沒有辦法使用內置的RequireHttpsAttribute類,但編寫自己的MVC過濾器屬性非常簡單。像這樣的東西(基於RequireHttpsAttribute類)應該工作:

public class RedirectToHttpsAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    protected string Host 
    { 
     get; 
     set; 
    } 

    public RedirectToHttpsAttribute (string host) 
    { 
     this.Host = host; 
    } 

    public virtual void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (!filterContext.HttpContext.Request.IsSecureConnection) { 
      HandleHttpsRedirect(filterContext); 
     } 
    } 

    protected virtual void HandleHttpsRedirect(AuthorizationContext context) 
    { 
     if (context.HttpContext.Request.HttpMethod != "GET") 
     { 
      throw new InvalidOperationException("Can only redirect GET"); 
     } 

     string url = "https://" + this.Host + context.HttpContext.Request.RawUrl; 
     context.Result = new RedirectResult(url); 
    } 
} 

編輯:

我不知道,如果你可以從web.config文件中讀取FilterAttribute,但我可以」想想爲什麼不行。

+0

很酷的解決方案,但我不這樣做是值得的,因爲它只用於測試服務器(在生產中我們有https://my-domain.com)。不過謝謝! – 2011-05-12 05:28:28