2

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

全球.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" } });
    }

登录.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。

任何线索?

4

1 回答 1

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

这实际上没有多大意义。鉴于未提供 URL 中的“ClientCompanyName”值,RouteValueDictionary 用于指示要使用的默认值。在这里,您说您希望“?ClientCompanyName”成为默认值。例如,如果您导航到http://baseUrl/Client,这将默认为http://baseUrl/Client/?ClientCompanyName(字面意思)。我认为您实际上想将 ?ClientCompanyName 更改为您希望成为默认值的实际“真实”公司名称。在这种情况下,我的建议是不要使用默认值,只需使用带有 3 个参数(字符串、字符串、字符串)的 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];
}
于 2011-04-06T03:01:27.800 回答