Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC(2)规范化EURL操作筛选器属性(C#)_C#_Asp.net Mvc 2_Normalization - Fatal编程技术网

ASP.NET MVC(2)规范化EURL操作筛选器属性(C#)

ASP.NET MVC(2)规范化EURL操作筛选器属性(C#),c#,asp.net-mvc-2,normalization,C#,Asp.net Mvc 2,Normalization,有人能验证这段代码的完整性吗?我想用它装饰控制器,这样它就可以将url规范化为https和/或www。这是我对代码的第二次重写,因为第一次代码被无限重定向,但不知何故,我仍然认为它不太存在 public class NormalizeUrl : ActionFilterAttribute { private bool ForceHttps = false; private bool ForceWww = false; public NormalizeUrl() {

有人能验证这段代码的完整性吗?我想用它装饰控制器,这样它就可以将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);
        };
    }
}

提前谢谢

无论如何,在破坏了我的网站几次之后,我想出了以下稳定的代码:

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);
                };
            };
        };
    }
}

你在寻找一个安全评估吗?不,我在寻找一个验证(或改进建议),如果代码能满足我的要求,那就是采取
http://domain.com
并将其转换为一个)
http://www.domain.com
,B)
https://domain.com
或C)
https://www.domain.com
基于控制器传入的参数。