asp.net-mvc – 在ASP.NET MVC中在HTTP和HTTPS之间移动
发布时间:2020-12-16 04:35:37 所属栏目:asp.Net 来源:网络整理
导读:所以我找到了[RequiresHttps]属性,但是一旦你在https中你的那种卡在那里,那么试着能够对一个网址(和方案)进行操作我发现我最终不得不创建我自己的ExtendedController为不使用[RequireHttps]的操作恢复为http. 只是想知道我在做什么是好的还是有更好的方法?
所以我找到了[RequiresHttps]属性,但是一旦你在https中你的那种卡在那里,那么试着能够对一个网址(和方案)进行操作我发现我最终不得不创建我自己的ExtendedController为不使用[RequireHttps]的操作恢复为http.
只是想知道我在做什么是好的还是有更好的方法? public class ExtendedController : Controller { protected virtual void HandleHttpRequest(AuthorizationContext filterContext) { if (!string.Equals(filterContext.HttpContext.Request.HttpMethod,"GET",StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("Cannot post between https and http."); } string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; filterContext.Result = new RedirectResult(url); } protected override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(filterContext); object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(true); if (!attributes.Any(a => a is RequireHttpsAttribute)) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.HttpContext.Request.IsSecureConnection) { this.HandleHttpRequest(filterContext); } } } } 解决方法
你所拥有的是语法上正确的,但建议是创建一个新的Action过滤器,它继承自默认的RequireHttpsAttribute,并使用一个参数在http和https之间切换.
public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute { public bool RequireSecure = false; public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) { if (RequireSecure) { base.OnAuthorization(filterContext); } else { // non secure requested if (filterContext.HttpContext.Request.IsSecureConnection) { HandleNonHttpRequest(filterContext); } } } protected virtual void HandleNonHttpRequest(AuthorizationContext filterContext) { if (String.Equals(filterContext.HttpContext.Request.HttpMethod,StringComparison.OrdinalIgnoreCase)) { // redirect to HTTP version of page string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; filterContext.Result = new RedirectResult(url); } } } 然后,在您的操作方法或控制器上,您将使用: [RequireHttps (RequireSecure = true)] … 要么 [RequireHttps (RequireSecure = false)] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 在MVC应用程序中使用ELMAH调试/跟踪消息
- ASP.NET MVC路由的无限URL参数
- webapi 利用 ActionFilter 为 ASP.NET Web API 添加 GZip 压
- asp.net-mvc – Razor如何创建一个CheckBox并使其为READONL
- 为什么我需要在ASP.NET控件上调用处理?
- asp.net-mvc – 在ASP.NET会话中存储任何内容导致500ms延迟
- asp.net-mvc-3 – ASP.Net MVC 3不显眼的验证不适用于部分视
- asp.net-mvc – ASP.NET MVC6中的实体框架7多个外键到同一个
- asp.net-mvc – 当注入服务或控制器的依赖关系太多时,重构策
- asp.net-mvc – 使用KendoUI Grid的KendoUI编辑器模板问题
推荐文章
站长推荐
- [你必须知道的.NET] 第二回:对抽象编程:接口和
- asp.net-mvc – ASP.net MVC – 显示模板集合
- 在asp.net httpContext.Cache中存储/检索项目最有
- asp.net – 在传递查询字符串时绕过表单身份验证
- 在Asp.Net中启用Secure中的HTTPOnly
- asp.net – 从Application_BeginRequest()中设置
- asp.net-mvc – ASP.NET MVC 2发行版本的实际调试
- ASP.NET:global.asax中的Access Session变量
- asp.net-mvc – 使用实体框架4.1创建复合主键
- 过期输出缓存ASP.Net MVC
热点阅读