Asp.net mvc 3 mvc3 https&;http
我正在将asp.net应用程序转换为mvc3。假设我有一个需要https的登录页面,而其他页面只需要http。我如何将登录重定向到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
[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);
}
}