现在,我在名为“ContactUs”的控制器内部有一个名为Feedback的操作,负责查看和处理反馈.
当我在该操作上使用[RequireHttps]属性时,它运行良好,并将URL更改为“https”.但是,我注意到我页面中的所有链接现在都指向“https”!好像这个属性迫使路由引擎将相同的内容应用到所有链接!
当然,只有这个单一动作才需要SSL,其余的都需要正常的http.
谁能告诉我如何解决这个问题?
解决方法
可以在控制器类型或操作方法上使用[RequireHttps]属性来说“只能通过SSL访问”.对控制器或操作的非SSL请求将被重定向到SSL版本(如果是HTTP GET)或被拒绝(如果是HTTP POST).您可以覆盖RequireHttpsAttribute并根据需要更改此行为.内置的[RequireHttp]属性没有相反的功能,但如果您愿意,可以轻松制作自己的属性.
还有Html.ActionLink()的重载,它采用协议参数;您可以明确指定“http”或“https”作为协议.这是一个超载的MSDN documentation.如果您没有指定协议或者如果您调用没有协议参数的重载,则假定您希望链接具有与当前请求相同的协议.
我们在MVC中没有[RequireHttp]属性的原因是它没有太大的好处.它不像[RequireHttps]那么有趣,它鼓励用户做错事.例如,许多网站通过SSL登录并在您登录后重定向回HTTP,这绝对是错误的做法.您的登录cookie与您的用户名密码一样秘密,现在您可以通过网络以明文形式发送它.此外,在运行MVC管道之前,您已经花时间执行握手并保护通道(这是使HTTPS比HTTP慢的大部分),因此[RequireHttp]将不会发出当前请求或未来要求更快.
原文地址:https://www.jb51.cc/aspnet/247677.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。