2012-02-03 14 views
3

この件に関しては、数多くの記事やリソースがあることを認識していますが、URLの周りにカテゴリ=シューズのようなクエリ文字列を別の場所に移動する方法のみを示すようです。この製品のように/ {カテゴリ}.net 4.0 QueryStringsを使用したルーティング

さて私は、次のクエリ文字列を持っている:profile.aspx Q = Iを照会するRoutHandlerを実装しようとしていた

-a33f-0e34b106877e 98c2b15f-90c3-4a7f? DBは、ユーザー名を検索し、URLを作成するmydomain.com/ usersname

は、これは私が(私はそれが働いて得るまですべてがハード今コーディングされている)を試みたものです:

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoute(System.Web.Routing.RouteTable.Routes); 
} 

void RegisterRoute(System.Web.Routing.RouteCollection routes) 
{ 
    routes.Add("Profiles", new System.Web.Routing.Route("profile/{profile}", new RouteHandler())); 
} 

そして、これは、ハンドラクラスです:

public IHttpHandler GetHttpHandler(RequestContext requestContext) 
{ 
    string username = requestContext.RouteData.Values["profile"] as string; 

    HttpContext.Current.Items["q"] = "98c2b15f-90c3-4a7f-a33f-0e34b106877e"; 
    return BuildManager.CreateInstanceFromVirtualPath("~/pub/profile.aspx", typeof(Page)) as Page; 
} 

プロフィール。 aspxは実際に "q"クエリーストーンを探します。上記の設定では、それを見つけることはできません。

私は間違っていますか?どのようにしてURLをルーティングしたり書き換えたりすることで、ページが必要なクエリーストリングを見つけることができるようにするか?

助けがあれば助かります。前もって感謝します。

答えて

0

最初のもの - .Net Framework 4を使用している場合、ハンドラを作成する必要はありません。ルートに直接MapPageRouteメソッドを使用できます。

あなたの質問への回答 - 「プロファイル」を特に探すのではなく、ハンドラで以下のようにforeachループを使用できます。あなたはあなたが

RouteHandler(string virPath) 
    { 
     this.VirtualPath = virPath; 
    } 

はもっと情報 - http://www.codeproject.com/Articles/77199/URL-Routing-with-ASP-NET-4-0 HTTPのためのこれらのリンクを参照してくださいRouteHandlerコンストラクタでVirtualPathを設定

string userName = this.Context.Items["profile"].ToString();  // "userName" and is set as route parameters in Global.asax 

ため

foreach (var urlParm in requestContext.RouteData.Values) 
     requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value; 

    return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler 

とあなたのルーティングされたページで

を確認してください:// msdn.microsoft.com/en-us/library/ie/cc668201.aspx