Asp.net mvc 3 mvc3 https&;http

Asp.net mvc 3 mvc3 https&;http,asp.net-mvc-3,Asp.net Mvc 3,我正在将asp.net应用程序转换为mvc3。假设我有一个需要https的登录页面,而其他页面只需要http。我如何将登录重定向到https并将所有其他页面保留在http上 任何建议都很好 这门课可能是你想要的 [RequireHttps] public ActionResult SignIn() { return View(); } 问题是,登录后,您的所有请求都将是https,即使您不想要它我喜欢此解决方案,因为: 1.因为在VS中您永远不必再触摸它。装饰器本身会导致浏览器以http

我正在将asp.net应用程序转换为mvc3。假设我有一个需要https的登录页面,而其他页面只需要http。我如何将登录重定向到https并将所有其他页面保留在http上

任何建议都很好

这门课可能是你想要的

[RequireHttps]
public ActionResult SignIn() {
   return View();
}

问题是,登录后,您的所有请求都将是https,即使您不想要它

我喜欢此解决方案,因为: 1.因为在VS中您永远不必再触摸它。装饰器本身会导致浏览器以https呈现站点,即使在调试中也是如此

  • 如果您将其实现到一个基本控制器中,并让您的所有控制器都继承自该控制器,那么您就知道不会有后顾之忧,可以这么说


  • 我和我的一位同事对此进行了研究,认为我们找到了一个很好的解决方案。以下是我们得出的结论:

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class HttpsRequiredAttribute : RequireHttpsAttribute
    {
        protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
        {
            // Check to see if we're secure
            string requirestr = ConfigurationManager.AppSettings["RequireHttps"];
            bool require;
            if (bool.TryParse(requirestr, out require) && require)
                base.HandleNonHttpsRequest(filterContext);
        }       
    
    }
    
    这可以通过扩展RequireAttribute来工作,并且可以应用于类或方法,如AttributeTargets所示。然后在RequireHttpAttribute中重写虚函数。该方法所做的是检查Web.config文件中名为“RequireHttps”的键。如果找不到它,或者它是无效的bool值(bool.tryparse会检查这个值),那么它就不需要Https。如果它发现该值为true,则需要HTTPS

    如果使用此扩展,则需要在Web.config中添加一个名为“RequireHttps”的键,如下所示:

    然后,您可以通过在调试时更改此变量来关闭Https要求,或者通过更改Web.config文件使其在站点部署的任何位置都具有该要求。

    值得注意的是,在他们登录后,根据您的问题,您应该显式使用http将他们重定向到下一页。这样他们就不会一直停留在https上。@jab hot是否使用http显式重定向到下一页?是否可以使用RedirectToAction()?
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class HttpsRequiredAttribute : RequireHttpsAttribute
    {
        protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
        {
            // Check to see if we're secure
            string requirestr = ConfigurationManager.AppSettings["RequireHttps"];
            bool require;
            if (bool.TryParse(requirestr, out require) && require)
                base.HandleNonHttpsRequest(filterContext);
        }       
    
    }