C# AsP.NET 4.0 url路由

C# AsP.NET 4.0 url路由,c#,asp.net,routing,url-routing,asp.net-routing,C#,Asp.net,Routing,Url Routing,Asp.net Routing,我正在尝试.NET4.0的新功能-url路由,但无法获取url中传递的信息。代码如下: GLOBAL.ASPX.CS protected void Application_Start(object sender, EventArgs e) { SetRouting(RouteTable.Routes); } private void SetRouting(RouteCollection routeCo

我正在尝试.NET4.0的新功能-url路由,但无法获取url中传递的信息。代码如下:

GLOBAL.ASPX.CS

    protected void Application_Start(object sender, EventArgs e)
    {            
        SetRouting(RouteTable.Routes);           
    }

    private void SetRouting(RouteCollection routeCollection)
    {
        routeCollection.MapPageRoute("Company",
        "Company/{CompanyName}",
        "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "CompanyName", "?CompanyName" } });

        routeCollection.MapPageRoute("Deal",
        "Company/{CompanyName}/{DealName}",
        "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "DealName", "?DealName" } });
        routeCollection.MapPageRoute("ClientRoute",
        "Client/{ClientCompanyName}",
        "~/User/Login.aspx", true, new RouteValueDictionary { { "ClientCompanyName", "?ClientCompanyName" } });
    }
Login.aspx:

    private string CompanyName { 
        get
        {
            if (Page.RouteData.Values["ClientCompanyName"] == null)
            {
                return null;
            }
            return Page.RouteData.Values["ClientCompanyName"].ToString();
        } 
    }
现在,即使我在url中使用Client/Google,上面提到的属性也会返回null。当我重置IIS(IIS 6)并第一次执行此操作时,它将返回值。否则它将给出null

有什么线索吗

routeCollection.MapPageRoute("ClientRoute", 
                             "Client/{ClientCompanyName}",         
                             "~/User/Login.aspx", 
                             true, 
                             new RouteValueDictionary {{ "ClientCompanyName", "?ClientCompanyName"}};
这实际上没有多大意义。RouteValueDictionary用于指示在URL中未提供“ClientCompanyName”值的情况下要使用的默认值。这里,您的意思是希望将“?ClientCompanyName”作为默认值。例如,如果导航到,则默认为(字面上)。我认为您实际上想将?ClientCompanyName更改为您希望作为默认值的实际“真实”公司名称。我的建议是在这种情况下不使用默认值,只使用带有3个参数(string、string、string)的MapPageRoute覆盖。我发现在很多情况下这已经足够了。此外,这里还有一个扩展方法,您可以为请求对象提供该扩展方法,它可以帮助您:

public static string GetDataFromRouteOrRequest(this HttpRequest request, string key)
{
    if (request.RequestContext.RouteData.Values.ContainsKey(key))
        return request.RequestContext.RouteData.Values[key].ToString();

    return request[key];
}
这实际上没有多大意义。RouteValueDictionary用于指示在URL中未提供“ClientCompanyName”值的情况下要使用的默认值。这里,您的意思是希望将“?ClientCompanyName”作为默认值。例如,如果导航到,则默认为(字面上)。我认为您实际上想将?ClientCompanyName更改为您希望作为默认值的实际“真实”公司名称。我的建议是在这种情况下不使用默认值,只使用带有3个参数(string、string、string)的MapPageRoute覆盖。我发现在很多情况下这已经足够了。此外,这里还有一个扩展方法,您可以为请求对象提供该扩展方法,它可以帮助您:

public static string GetDataFromRouteOrRequest(this HttpRequest request, string key)
{
    if (request.RequestContext.RouteData.Values.ContainsKey(key))
        return request.RequestContext.RouteData.Values[key].ToString();

    return request[key];
}

谢谢你的回复。但同样的原因是我的登录页面被点击了两次。首先是预期的URL,然后是相同的URL,ClientCompanyName替换为“iepngfix.htc”。这种情况发生在Itehanks的回复上。但同样的原因是我的登录页面被点击了两次。首先是预期的URL,然后是相同的URL,ClientCompanyName替换为“iepngfix.htc”。这发生在IE上