代码之家  ›  专栏  ›  技术社区  ›  Gup3rSuR4c

ASP.NET MVC(2)NormalizeUrl操作筛选器属性(C#)

  •  0
  • Gup3rSuR4c  · 技术社区  · 15 年前

    有人能验证这段代码的完整性吗?我想用它装饰控制器,这样它就可以将url规范化为https和/或www。这是我对代码的第二次重写,因为第一次重写将自己抛出到无限重定向中,但不知怎么的,我仍然认为它不太存在。。。

    public class NormalizeUrl : ActionFilterAttribute {
        private bool ForceHttps = false;
        private bool ForceWww = false;
    
        public NormalizeUrl() {
        }
    
        public NormalizeUrl(
            bool ForceHttps,
            bool ForceWww) {
            this.ForceHttps = ForceHttps;
            this.ForceWww = ForceWww;
        }
    
        public override void OnActionExecuting(
            ActionExecutingContext Context) {
            HttpRequestBase Request = Context.HttpContext.Request;
            HttpResponseBase Response = Context.HttpContext.Response;
    
            if (!Request.IsLocal) {
                Uri Uri;
    
                if (!Request.IsSecureConnection && ForceHttps) {
                    if (ForceWww) {
                        Uri = new Uri(Uri.UriSchemeHttps + "://www." + Request.Url.Host.Replace("www.", string.Empty) + "/" + Request.Url.AbsolutePath);
                    } else {
                        Uri = new Uri(Uri.UriSchemeHttps + "://" + Request.Url.Host.Replace("www.", string.Empty) + "/" + Request.Url.AbsolutePath);
                    };
                } else if (!ForceHttps) {
                    if (ForceWww) {
                        Uri = new Uri(Uri.UriSchemeHttp + "://www." + Request.Url.Host.Replace("www.", string.Empty) + "/" + Request.Url.AbsolutePath);
                    } else {
                        Uri = Request.Url;
                    };
                } else {
                    Uri = Request.Url;
                };
    
                Response.RedirectPermanent(Uri.AbsoluteUri, true);
            };
        }
    }
    

    1 回复  |  直到 15 年前
        1
  •  1
  •   yoozer8    13 年前

    public class NormalizeUrl : ActionFilterAttribute {
        private bool ForceHttps = false;
        private bool ForceWww = false;
    
        public NormalizeUrl(
            bool ForceHttps,
            bool ForceWww) {
            this.ForceHttps = ForceHttps;
            this.ForceWww = ForceWww;
        }
    
        public override void OnActionExecuting(
            ActionExecutingContext Context) {
            HttpRequestBase Request = Context.HttpContext.Request;
            HttpResponseBase Response = Context.HttpContext.Response;
    
            if (!Request.IsLocal) {
                if (!Request.IsSecureConnection && this.ForceHttps) {   //  http://domain.com OR http://www.domain.com
                    if (this.ForceWww && !Request.Url.Host.Contains("www.")) {  //  http://domain.com
                        Response.RedirectPermanent(new Uri(Uri.UriSchemeHttps + "://www." + Request.Url.Host + Request.Url.AbsolutePath).AbsoluteUri, true);
                    } else {    //  http://www.domain.com
                        Response.RedirectPermanent(new Uri(Uri.UriSchemeHttps + "://" + Request.Url.Host + Request.Url.AbsolutePath).AbsoluteUri, true);
                    };
                } else {
                    if (this.ForceWww && !Request.Url.Host.Contains("www.")) {  //  http://domain.com OR https://domain.com
                        Response.RedirectPermanent(new Uri(Request.Url.Scheme + "://www." + Request.Url.Host + Request.Url.AbsolutePath).AbsoluteUri, true);
                    };
                };
            };
        }
    }
    
    推荐文章