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

これは実際にはあまり意味がありません。RouteValueDictionaryは、URLの「ClientCompanyName」値が指定されていない場合に使用するデフォルト値を示すために使用されます。ここでは、「?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 に答える