首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC [RequireHttps] -返回http

ASP.NET MVC [RequireHttps] -返回http
EN

Stack Overflow用户
提问于 2012-02-21 06:08:07
回答 3查看 1.8K关注 0票数 7

一旦你把[RequireHttps]放在一个动作上,用户从超文本传输协议切换到超文本传输协议,所有后续的链接都将保持超文本传输协议...

有没有办法切换回HTTP?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-21 06:22:01

从技术上讲,你可以这样做,

你可以look at the source of RequireHttpsAttribute并反转它。

在实践中,您可能不应该使用

如果会话仍处于活动状态,则返回it is generally inadvisable to return to HTTP。这可以是foundation for a variety of attacks,例如session hijacking

票数 6
EN

Stack Overflow用户

发布于 2012-02-21 06:15:51

此链接提供了有关如何针对特定操作方法处理从HTTPS切换回HTTP的详细说明

http://blog.clicktricity.com/2010/03/switching-to-https-and-back-to-http-in-asp-net-mvc/

票数 2
EN

Stack Overflow用户

发布于 2013-11-25 00:13:03

下面是我使用的'ExitHttpsIfNotRequired‘属性:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class RetainHttpsAttribute : Attribute
{
}

public class ExitHttpsIfNotRequiredAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        // Abort if it's not a secure connection  
        if (!filterContext.HttpContext.Request.IsSecureConnection) return;

        if (filterContext.ActionDescriptor.ControllerDescriptor.ControllerName == "sdsd") return;

        // Abort if it's a child controller
        if (filterContext.IsChildAction) return;

        // Abort if a [RequireHttps] attribute is applied to controller or action  
        if (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
        if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;

        // Abort if a [RetainHttps] attribute is applied to controller or action  
        if (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute), true).Length > 0) return;
        if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute), true).Length > 0) return;

        // Abort if it's not a GET request - we don't want to be redirecting on a form post  
        if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) return;

        // Abort if the error controller is being called - we may wish to display the error within a https page
        if (filterContext.ActionDescriptor.ControllerDescriptor.ControllerName == "Error") return;

        // No problems - redirect to HTTP
        string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
        filterContext.Result = new RedirectResult(url);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9369160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档