Asp.net-Mvc

ASP MVC 3 RequireHttps 屬性將所有連結更改為 https

  • October 14, 2015

我有一個 ASP MVC 3 網站,它有一個回饋表並且應該需要 SSL。

現在,我在一個名為“ContactUs”的控制器中有一個名為“回饋”的操作,該控制器負責查看和處理回饋。

當我[RequireHttps]在該操作上使用該屬性時,它執行良好,並將 URL 更改為“https”。但是,我注意到我頁面內的所有連結現在都指向“https”!好像這個屬性迫使路由引擎對所有連結都應用相同的屬性!!!

當然,SSL 只需要這個單一的動作,其餘的都需要正常的 http。

誰能告訴我如何解決這個問題?

在您的情況下[RequireHttp],如果您清除登錄 cookie,則屬性可能沒問題 - 或者您將以明文形式通過網路發送它。避免進一步的 HTTPS 呼叫的輕微成本可能比它值得做的工作更多。SO 都是關於回收問題的,其他閱讀您的問題的使用者可能會認為登錄後下拉到 HTTP 是可以的,而這通常是錯誤的做法。

[RequireHttps]屬性可用於控制器類型或操作方法,表示“只能通過 SSL 訪問”。對控制器或操作的非 SSL 請求將被重定向到 SSL 版本(如果是 HTTP GET)或被拒絕(如果是 HTTP POST)。如果您願意,您可以覆蓋 RequireHttpsAttribute 並更改此行為。沒有[RequireHttp]內置的屬性可以做相反的事情,但是如果您願意,您可以輕鬆地製作自己的屬性。

還有一些Html.ActionLink()帶有協議參數的重載;您可以明確指定“http”或“https”作為協議。這是有關此類重載的MSDN 文件。如果您未指定協議或呼叫沒有協議參數的重載,則假定您希望連結具有與目前請求相同的協議。

我們[RequireHttp]在 MVC 中沒有屬性的原因是它並沒有太多好處。它不如 有趣[RequireHttps],而且它鼓勵使用者做錯事。例如,許多網站通過 SSL 登錄並在您登錄後重定向回 HTTP,這絕對是錯誤的做法。您的登錄 cookie 與您的使用者名 + 密碼一樣保密,現在您通過網路以明文形式發送它。此外,在 MVC 管道執行之前,您已經花時間執行握手並保護通道(這是使 HTTPS 比 HTTP 慢的主要原因),因此[RequireHttp]不會使目前請求或未來請求更快.

引用自:https://stackoverflow.com/questions/9719654