AsP.NET 4.0 url路由

时间:2011-04-05 14:06:05

标签: c# asp.net routing url-routing asp.net-routing

我正在尝试.NET 4.0的新功能 - 网址路由但无法获取网址中传递的信息。以下是代码:

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

现在,即使我在网址中使用Client / Google,上面提到的属性也会返回null。当我重置IIS(IIS 6)并第一次执行它时,它返回值。否则它会给出null。

任何CLUE ??

1 个答案:

答案 0 :(得分:0)

routeCollection.MapPageRoute("ClientRoute", 
                             "Client/{ClientCompanyName}",         
                             "~/User/Login.aspx", 
                             true, 
                             new RouteValueDictionary {{ "ClientCompanyName", "?ClientCompanyName"}};

这实际上没有多大意义。 RouteValueDictionary用于指示默认值,因为未提供URL中的“ClientCompanyName”值。在这里,您说您希望“?ClientCompanyName”成为默认值。例如,如果您导航到http://baseUrl/Client,则默认为http://baseUrl/Client/?ClientCompanyName(字面意思)。我想你想要实际更改?ClientCompanyName到你希望默认的实际“真实”公司名称。我的建议是不要在这种情况下使用默认值,只使用带有3个参数的MapPageRoute覆盖(字符串,字符串,字符串)。我发现在很多情况下这已经足够了。此外,这里有一个扩展方法,您可以使用Request对象来帮助您:

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