【问题标题】:ASP.NET MVC RequireHttpsASP.NET MVC RequireHttps
【发布时间】:2010-12-07 03:46:18
【问题描述】:

如何使用 ASP.NET MVC 2 Preview 2 Futures RequireHttps 属性?

我想防止将不安全的 HTTP 请求发送到操作方法。我想自动重定向到 HTTPS。

MSDN:

如何使用此功能?

【问题讨论】:

    标签: asp.net-mvc ssl asp.net-mvc-2 https asp.net-mvc-futures


    【解决方案1】:

    我的猜测:

    [RequireHttps] //apply to all actions in controller
    public class SomeController 
    {
      //... or ...
      [RequireHttps] //apply to this action only
      public ActionResult SomeAction()
      {
      }
    
    }
    

    【讨论】:

    • 这似乎阻止了 HTTP 请求,但它不会重定向到 HTTPS。
    • 没有。这可能只是 Visual Studio 的 ASP.NET 开发服务器的问题。 stackoverflow.com/questions/60113
    • ASP.NET MVC RequireHttps 仅用于生产:stackoverflow.com/questions/1639707/…
    • 可能是一个基本问题,如阅读herehere post 请求也被加密,但想知道天气我应该在帖子中装饰RequireHttps 吗?
    【解决方案2】:

    我认为你需要为此推出自己的ActionFilterAttribute

    public class RedirectHttps : ActionFilterAttribute {
       public override void OnActionExecuting(ActionExecutingContext filterContext) {
            if (!filterContext.HttpContext.Request.IsSecureConnection) {
                filterContext.Result = 
                    new RedirectResult(filterContext.HttpContext.Request.Url.
                        ToString().Replace("http:", "https:"));
                filterContext.Result.ExecuteResult(filterContext);
            }
            base.OnActionExecuting(filterContext);
        }
    }
    

    然后在你的控制器中:

    public class HomeController : Controller {
    
        [RedirectHttps]
        public ActionResult SecuredAction() {
            return View();
        }
    }
    

    您可能还想阅读this

    【讨论】:

    • 将此添加到用于 POST 方法的操作时要小心。
    • @Carl 为什么?因为帖子数据丢失了?如果您想确保敏感数据不会通过非 https 发布,则不应处理该数据。
    • @çağdaş 您可能希望使用此方法来更改方案 - 应该比字符串替换更安全:stackoverflow.com/questions/17968426/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2011-04-07
    • 2011-03-18
    相关资源
    最近更新 更多