ASP.NET MVC下的SSL页面
如何在基于ASP.NET MVC的站点中的某些页面上使用HTTPS?
史蒂夫·桑德森(Steve Sanderson)在Preview 4上以DRY方式提供了一个很好的教程,该教程以DRY方式进行:
http://blog.codeville.net/2008/08/05/adding-httpsssl-support-to-aspnet-mvc-routing/
预览5是否有更好/更新的方式?,
解决方案
一些ActionLink扩展:http://www.squaredroot.com/post/2008/06/11/MVC-and-SSL.aspx
或者重定向到https:// http://forums.asp.net/p/1260198/2358380.aspx#2358380的控制器操作属性
这是Pablo M. Cibrano于2009年1月发布的博客,收集了包括HttpModule和扩展方法在内的两种技术。
这是Adam Salvo的博客文章,其中使用了ActionFilter。
MVCFutures具有" RequireSSL"属性。
(感谢亚当在更新的博客文章中指出这一点)
如果我们希望http://请求自动成为https://,则将其应用于操作方法,并使用'Redirect = true'。
[RequireSsl(Redirect = true)]
另请参阅:仅在生产中的ASP.NET MVC RequireHttps
这是Dan Wahlin最近关于此的帖子:
http://weblogs.asp.net/dwahlin/archive/2009/08/25/requiring-ssl-for-asp-net-mvc-controllers.aspx
他使用ActionFilter属性。
如果我们使用的是ASP.NET MVC 2 Preview 2或者更高版本,则现在可以简单地使用:
[RequireHttps] public ActionResult Login() { return View(); }
不过,正如这里提到的,order参数值得注意。
正如Amadiere所写,[RequireHttps]在MVC 2中可以很好地用于输入HTTPS。但是,如果我们只希望像我们所说的那样对某些页面使用HTTPS,则MVC 2一旦将用户切换到HTTPS,他们就一直停留在该页面上,直到我们手动重定向它们之后,它才会给我们任何帮助。
我使用的方法是使用另一个自定义属性[ExitHttpsIfNotRequired]。添加到控制器或者操作后,如果出现以下情况,它将重定向到HTTP:
- 该请求是HTTPS
- [RequireHttps]属性未应用于操作(或者控制器)
- 该请求是GET(重定向POST会导致各种麻烦)。
它太大了,无法在此处发布,但是我们可以在此处看到代码以及一些其他详细信息。
这不一定特定于MVC,但是此解决方案对ASP.NET WebForms和MVC均适用:
http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx
我已经使用了几年了,喜欢通过web.config文件将关注点和管理分离。