Url被global.asax重写,Asp.net中出现错误404

Url被global.asax重写,Asp.net中出现错误404,asp.net,iis-7,url-rewriting,Asp.net,Iis 7,Url Rewriting,我正在从事一个具有以下属性的项目: Asp.net C# .Net Framework 4 IIS 7 在其中,我使用应用程序\u BeginRequest手动重写如下: void Application_BeginRequest(object sendet, EventArgs e) { bool IsUploading = System.Configuration.ConfigurationManager.AppSettings["IsUloading"] ==

我正在从事一个具有以下属性的项目:

Asp.net
C# 
.Net Framework 4
IIS 7
在其中,我使用
应用程序\u BeginRequest
手动重写如下:

void Application_BeginRequest(object sendet, EventArgs e)
    {

        bool IsUploading = System.Configuration.ConfigurationManager.AppSettings["IsUloading"] == "1";

        if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            return;
        }

        string Path = Request.RawUrl;
        string QueryString = "";

        if (Request.QueryString.Count != 0)
        {
            string[] u = Path.Split(new char[] { '?' });
            Path = u[0];
            QueryString = u[1];
        }

        string url = "";

        if (Path.EndsWith(".css") || Path.EndsWith(".js") || Path.EndsWith(".png") || Path.EndsWith(".jpg") || Path.EndsWith(".jpeg") || Path.EndsWith(".bmp") || Path.EndsWith(".htm") || Path.EndsWith(".png") || Path.EndsWith(".gif") || Path.EndsWith(".fla") || Path.EndsWith(".swf") || Path.EndsWith(".axd") || Path.EndsWith(".xml") || Path.EndsWith(".ashx"))
            return;

        if (!Path.EndsWith("/"))
            Path += "/";

        IEnumerator<string> Part = Path.Split(new char[] { '/' }).AsEnumerable<string>().GetEnumerator();

        if (Part.MoveNext() && Part.MoveNext())
        {

            if (Part.Current == "")
                url = "Default.aspx";

            else if (Part.Current.ToLower() == "public")
            {

                if (Part.MoveNext() && Part.Current.ToLower() == "install")
                    url = "Public/Install.aspx";
                else
                    url = "Public/PageNotFound.aspx";

            }

            else
                url = "Public/PageNotFound.aspx";

        }
        else
            url = "Public/PageNotFound.aspx";

        if (url.Contains("?"))
            Context.RewritePath("~/" + url + "&" + QueryString);
        else
            Context.RewritePath("~/" + url + "?" + QueryString);

    }
错误在哪里

UPDATE1:当我尝试浏览
localhost:97/Public/Install
时,VS不会在我在此事件中设置的断点上停止。我想我的请求在IIS中被拒绝了

更新2:我知道我的代码是百分之百正确的,因为我们正在TFS服务器上工作,而另一台计算机没有任何问题,只有我的计算机遇到了这个问题


对不起,我的英语不好。我是新来的。有关更多详细信息,请评论我。

我认为使用aspnet路由实现您的目标可能会非常好

您可以创建自己的路径,例如“public/install”,这是一个路由

如果它是匹配aspnet移动,你也可以使用一个全包路由,用来显示404403500等等。更简单,减少你的代码

这是vbnet中的一个简单示例:

  Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.EnableFriendlyUrls()
    'blocca il trattamento dei vari snippet
    routes.Add(New Route("{resource}.axd/{*pathInfo}", New StopRoutingHandler()))
    routes.Add(New Route("route", New StopRoutingHandler()))
    routes.Add(New Route("bundles/css", New StopRoutingHandler()))
    'routes.Add(New Route("script/zx", New StopRoutingHandler()))
    'routes.Add(New Route("script/av", New StopRoutingHandler()))
    'routes.Add(New Route("script/pf", New StopRoutingHandler()))
    'routes.Add(New Route("script/bv", New StopRoutingHandler()))
    'sezione errori
    routes.MapPageRoute("404", "NotFound", "~/error/404.aspx", False)
    routes.MapPageRoute("500", "ServerError", "~/error/500.aspx", False)
    routes.MapPageRoute("503", "ServerUnavailable", "~/error/503.aspx", False)
    'fonti base
    routes.MapPageRoute("Home", "", "~/Default.aspx", False)
    routes.MapPageRoute("DefaultVasVoip", "vas-e-voip", "~/route/vas-voip/DefaultVasVoip.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("VasVoipRoute", "vas-e-voip/{service}/{id}", "~/route/vas-voip/DefaultVasVoip.aspx", False, New RouteValueDictionary(New With {.name = "VasVoipRoute"}))
    routes.MapPageRoute("MarketingRoute", "marketing/{service}/{id}", "~/route/marketing/DefaultMarketing.aspx", False, New RouteValueDictionary(New With {.name = "MarketingRoute"}))
    routes.MapPageRoute("DefaultMarketing", "marketing", "~/route/marketing/DefaultMarketing.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("HostingRoute", "hosting/{service}/{id}", "~/route/hosting/DefaultHosting.aspx", False, New RouteValueDictionary(New With {.name = "HostingRoute"}))
    routes.MapPageRoute("Optimization", "seo/{service}/{id}", "~/route/seo/DefaultSeo.aspx", False, New RouteValueDictionary(New With {.name = "Optimization"}))
    routes.MapPageRoute("DefaultSeoHosting", "hosting-e-seo", "~/route/hosting/DefaultHosting.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("Contact", "contatti", "~/route/Contact.aspx", False)
    routes.MapPageRoute("Login", "login", "~/route/ssl/login.aspx", False, New RouteValueDictionary(New With {.name = "login", .ssl = True}))
    routes.MapPageRoute("LoginRedirect", "login/redirect", "~/route/ssl/login.aspx", False, New RouteValueDictionary(New With {.name = "redirect"}))
    routes.MapPageRoute("Admin", "ssl/admin/", "~/route/ssl/private/admin/Default.aspx")
    routes.MapPageRoute("Customer", "ssl/customer/", "~/route/ssl/private/customer/Default.aspx")
    routes.MapPageRoute("About", "chi-siamo", "~/route/About.aspx", False)
    routes.MapPageRoute("articles", "articles", "~/route/article/Default.aspx", False)
    routes.MapPageRoute("article", "article/{gg}/{mm}/{yyyy}/{id}/{title}", "~/route/article/Default.aspx", False)
    routes.MapPageRoute("termini", "termini-e-condizioni", "~/route/Termini.aspx", False)
    routes.MapPageRoute("privacy", "privacy", "~/route/Privacy.aspx", False)
    routes.MapPageRoute("portfolio", "portfolio", "~/route/portfolio.aspx", False)
    routes.MapPageRoute("faq", "faq", "~/route/faq.aspx", False)
    'Catch All per ogni richiesta errata 
    routes.MapPageRoute("CatchAllErrors", "{*url}", "~/InvalidRequest.aspx", False)
End Sub

我希望它能对您有所帮助。

首先插入一些日志记录/调试语句,这样您就可以看到代码对您的路径做了什么。由于您正在手动处理路径,并且可能正在进行重写,因此最终的请求会变得非常混乱。@mellamokb,我尝试过并设置了一些断点,但我的请求在IIS中停止,VS不会对断点起作用,这到底是什么意思?!
  Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.EnableFriendlyUrls()
    'blocca il trattamento dei vari snippet
    routes.Add(New Route("{resource}.axd/{*pathInfo}", New StopRoutingHandler()))
    routes.Add(New Route("route", New StopRoutingHandler()))
    routes.Add(New Route("bundles/css", New StopRoutingHandler()))
    'routes.Add(New Route("script/zx", New StopRoutingHandler()))
    'routes.Add(New Route("script/av", New StopRoutingHandler()))
    'routes.Add(New Route("script/pf", New StopRoutingHandler()))
    'routes.Add(New Route("script/bv", New StopRoutingHandler()))
    'sezione errori
    routes.MapPageRoute("404", "NotFound", "~/error/404.aspx", False)
    routes.MapPageRoute("500", "ServerError", "~/error/500.aspx", False)
    routes.MapPageRoute("503", "ServerUnavailable", "~/error/503.aspx", False)
    'fonti base
    routes.MapPageRoute("Home", "", "~/Default.aspx", False)
    routes.MapPageRoute("DefaultVasVoip", "vas-e-voip", "~/route/vas-voip/DefaultVasVoip.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("VasVoipRoute", "vas-e-voip/{service}/{id}", "~/route/vas-voip/DefaultVasVoip.aspx", False, New RouteValueDictionary(New With {.name = "VasVoipRoute"}))
    routes.MapPageRoute("MarketingRoute", "marketing/{service}/{id}", "~/route/marketing/DefaultMarketing.aspx", False, New RouteValueDictionary(New With {.name = "MarketingRoute"}))
    routes.MapPageRoute("DefaultMarketing", "marketing", "~/route/marketing/DefaultMarketing.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("HostingRoute", "hosting/{service}/{id}", "~/route/hosting/DefaultHosting.aspx", False, New RouteValueDictionary(New With {.name = "HostingRoute"}))
    routes.MapPageRoute("Optimization", "seo/{service}/{id}", "~/route/seo/DefaultSeo.aspx", False, New RouteValueDictionary(New With {.name = "Optimization"}))
    routes.MapPageRoute("DefaultSeoHosting", "hosting-e-seo", "~/route/hosting/DefaultHosting.aspx", False, New RouteValueDictionary(New With {.name = "default"}))
    routes.MapPageRoute("Contact", "contatti", "~/route/Contact.aspx", False)
    routes.MapPageRoute("Login", "login", "~/route/ssl/login.aspx", False, New RouteValueDictionary(New With {.name = "login", .ssl = True}))
    routes.MapPageRoute("LoginRedirect", "login/redirect", "~/route/ssl/login.aspx", False, New RouteValueDictionary(New With {.name = "redirect"}))
    routes.MapPageRoute("Admin", "ssl/admin/", "~/route/ssl/private/admin/Default.aspx")
    routes.MapPageRoute("Customer", "ssl/customer/", "~/route/ssl/private/customer/Default.aspx")
    routes.MapPageRoute("About", "chi-siamo", "~/route/About.aspx", False)
    routes.MapPageRoute("articles", "articles", "~/route/article/Default.aspx", False)
    routes.MapPageRoute("article", "article/{gg}/{mm}/{yyyy}/{id}/{title}", "~/route/article/Default.aspx", False)
    routes.MapPageRoute("termini", "termini-e-condizioni", "~/route/Termini.aspx", False)
    routes.MapPageRoute("privacy", "privacy", "~/route/Privacy.aspx", False)
    routes.MapPageRoute("portfolio", "portfolio", "~/route/portfolio.aspx", False)
    routes.MapPageRoute("faq", "faq", "~/route/faq.aspx", False)
    'Catch All per ogni richiesta errata 
    routes.MapPageRoute("CatchAllErrors", "{*url}", "~/InvalidRequest.aspx", False)
End Sub