7

我有一个 ASP MVC 3 网站,它有一个反馈表并且应该需要 SSL。

现在,我在一个名为“ContactUs”的控制器中有一个名为“反馈”的操作,该控制器负责查看和处理反馈。

当我[RequireHttps]在该操作上使用该属性时,它运行良好,并将 URL 更改为“https”。但是,我注意到我页面内的所有链接现在都指向“https”!好像这个属性迫使路由引擎对所有链接都应用相同的属性!!!

当然,SSL 只需要这个单一的动作,其余的都需要正常的 http。

谁能告诉我如何解决这个问题?

4

2 回答 2

13

在您的情况下[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]不会使当前请求或未来请求更快.

于 2012-03-16T00:21:03.980 回答
0

您可以创建另一个自定义过滤器属性以移回 http。尝试这个问题的解决方案...... 为什么一旦在操作级别使用 [RequireHttps] 启用 SSL,它就会永远保持启用状态?

于 2012-03-15T13:23:48.467 回答