Asp.net 知道RouteTable.Routes中是否包含当前url

Asp.net 知道RouteTable.Routes中是否包含当前url,asp.net,webforms,friendly-url,Asp.net,Webforms,Friendly Url,在我的Global.asax中,我有这些规则 protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.EnableFriendlyUrls(); RouteTable.Routes.MapPageRoute("", "Home", "~/Default.aspx"); RouteTable.Routes.MapPageRoute

在我的Global.asax中,我有这些规则

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.EnableFriendlyUrls();
        RouteTable.Routes.MapPageRoute("", "Home", "~/Default.aspx");
        RouteTable.Routes.MapPageRoute("", "Carrello", "~/Carrello.aspx");
        RouteTable.Routes.MapPageRoute("", "Checkout", "~/Checkout2.aspx");
        RouteTable.Routes.MapPageRoute("", "Ricerca-Prodotto/{Filtri}/{Pagina}", "~/ProductsSearch.aspx");
        RouteTable.Routes.MapPageRoute("", "Prodotto/{ProductId}", "~/Product.aspx");
        RouteTable.Routes.MapPageRoute("", "Prodotti/{Menu}/{Marca}/{Categoria}/{Pagina}", "~/Product.aspx");

    }
我还需要重写来管理

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        System.Collections.Generic.List<Rewrite> rewrites = Rewrite.getRules();
        String fullOriginalPath = Request.Url.ToString();
        int index = 0;
        if(fullOriginalPath.Contains("www."))
            index = fullOriginalPath.IndexOf('/', fullOriginalPath.IndexOf("e-miko.com")) + 1;
        else
            index = fullOriginalPath.IndexOf('/', fullOriginalPath.IndexOf("localhost")) + 1;

        string chiave = fullOriginalPath.Substring(index);

        Utility.WriteToLog(chiave);

        foreach (Rewrite r in rewrites)
        {
            if(r.Chiave == chiave)
            {
                string url = "/" + r.Pagina;
                if (r.Param1 != null)
                    url += "/" + r.Param1;
                if (r.Param2 != null)
                    url += "/" + r.Param2;
                if (r.Param3 != null)
                    url += "/" + r.Param3;
                if (r.Param4 != null)
                    url += "/" + r.Param4;
                if (r.Param5 != null)
                    url += "/" + r.Param5;
                Context.RewritePath(url);
            }
        }

    }
受保护的无效应用程序\u BeginRequest(对象发送方,事件参数e)
{
System.Collections.Generic.List rewrites=Rewrite.getRules();
字符串fullOriginalPath=Request.Url.ToString();
int指数=0;
if(fullOriginalPath.Contains(“www.”)
index=fullOriginalPath.IndexOf(“/”,fullOriginalPath.IndexOf(“e-miko.com”)+1;
其他的
index=fullOriginalPath.IndexOf(“/”,fullOriginalPath.IndexOf(“localhost”))+1;
string chiave=fullOriginalPath.Substring(索引);
实用程序写入日志(chiave);
foreach(重写中的重写器)
{
if(r.Chiave==Chiave)
{
字符串url=“/”+r.Pagina;
如果(r.Param1!=null)
url+=“/”+r.Param1;
如果(r.Param2!=null)
url+=“/”+r.Param2;
如果(r.Param3!=null)
url+=“/”+r.Param3;
如果(r.Param4!=null)
url+=“/”+r.Param4;
如果(r.Param5!=null)
url+=“/”+r.Param5;
重写路径(url);
}
}
}
我还试着把这几行放在web.config中

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" path="/PageNotFound.aspx" responseMode="ExecuteURL" />
    <remove statusCode="500" subStatusCode="-1" />
    <error statusCode="500" path="/PageNotFound.aspx" responseMode="ExecuteURL" />

但是我所有的URLEwrite页面都在PageNotFound.aspx中

如果这些规则中不包含当前Url,是否有方法将用户重定向到主页? 例如,如果当前url为/CheckoutError,如何将用户重定向到/Home


谢谢

你的问题重复了

你只需要

RouteTable.Routes.MapPageRoute("defaultRoute", "{*value}", "~/Home.aspx");

谢谢,我添加了一个关于UrlRewrite的问题。所以基本上现在是404还是什么?不,我只是想了解你现在在UI上看到了什么。如果你继续地址,你有一个404(这没关系,因为我没有“abcd”这个词的重写,所以我可以在web.config中使用规则。如果我在web.config中使用这些规则,也可以使用重写规则的页面(存储在数据库表中)例如404错误。关于事件顺序和生命周期,我认为您可能需要在HTTP处理程序之前钩住一个处理程序,看看您是否能解决这个问题。可能有点麻烦,但您是否尝试从错误页面的代码后面重定向?理论上,您可以从请求查询字符串获取返回url,这样您就知道e用户最初想去。@derloopkat我必须按照现在我在页面中的Global.asax应用程序_BeginRequest方法_PageNotFound.aspx.cs的加载中所做的操作进行操作?不,只需处理将要出错的页面,就可以了