3

使用 c# mvc,如何确保通过 ssl 调用特定的操作?

例如在支付页面上,我的服务器允许 https/http,但我想强制用户访问它使用 https?

我正在考虑类似 actionfilter 的东西,如果他们不使用它会将它们重定向到 https 吗?

这是一个正确的方法吗?

4

2 回答 2

3

两秒钟后,当然是框架的一部分。

RequireHttps属性

于 2013-01-10T03:47:34.407 回答
3

在您的情况下 [RequireHttp],如果您清除登录 cookie,则属性可能会起作用 - 或者您将以明文形式通过网络发送它。避免进一步的轻微成本可能比值得做的工作更多HTTPS calls.SO 都是关于回收问题的,其他阅读您的问题的用户可能会认为在登录后下拉到 HTTP 是可以的,而这通常是错误的做法。

[RequireHttps]属性可用于控制器类型或操作方法,表示“只能通过 SSL 访问”。 对控制器或操作的非 SSL 请求将被重定向到 SSL 版本(如果是 HTTP GET)或被拒绝(如果是 HTTP POST)。如果您愿意,您可以覆盖 RequireHttpsAttribute 并更改此行为。没有内置的 [RequireHttp] 属性可以做相反的事情,但是如果您愿意,您可以轻松地制作自己的属性。

还有 Html.ActionLink() 的重载,它采用协议参数;您可以明确指定“http”或“https”作为协议。这是有关此类重载的MSDN 文档。如果您未指定协议或调用没有协议参数的重载,则假定您希望链接具有与当前请求相同的协议。

我们在 MVC 中没有 [RequireHttp] 属性的原因是它并没有太多好处。它不像[RequireHttps]那么有趣,它鼓励用户做错事。例如,许多网站通过 SSL 登录并在您登录后重定向回 HTTP,这绝对是错误的做法。您的登录 cookie 与您的用户名 + 密码一样保密,现在您通过网络以明文形式发送它。此外,在 MVC 管道运行之前,您已经花时间执行握手并保护通道(这是使 HTTPS 比 HTTP 慢的主要原因),因此 [RequireHttp] 不会发出当前请求或未来请求更快。

于 2013-01-10T03:51:09.467 回答