【问题标题】:AsP.NET 4.0 url routingAsP.NET 4.0 url 路由
【发布时间】:2011-07-30 00:26:20
【问题描述】:

我正在尝试 .NET 4.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" } });
    }

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

有什么线索吗??

【问题讨论】:

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


    【解决方案1】:
    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 覆盖。我发现在很多情况下这已经足够了。此外,这里有一个扩展方法,您可以为 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];
    }
    

    【讨论】:

    • 感谢您的回复。但同样的原因是我的登录页面被点击了两次。首先使用预期的 URL,然后再次将 ClientCompanyName 替换为“iepngfix.htc”的相同 url。这发生在 IE 上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多