2

Global.asaxには次のようなルールがあります。

RouteTable.Routes.MapPageRoute("defaultRoute", "{*value}", "~/default.aspx")

基本的に、物理的に存在しないページはdefault.aspxにリダイレクトされます。そのページが読み込まれると、Page_Loadサブで次のように使用します。

Dim prospect_url As String = Page.RouteData.Values("value")

次に、これを次のようなセッション変数に変換します。

Session("prospect_url") = prospect_url

最終的に、個人は別のページにリダイレクトされます...この値に再度アクセスする必要がありますが、次の操作を実行すると、次のようになります。

Dim prospect_url As String = CStr(Session("prospect_url"))

私はprospect_urlの値としてWebResource.axdを取得します。何?!?それはどこから来ましたか?

4

2 に答える 2

3

以下のコードを試してください。

 protected void Application_Start(object sender, EventArgs e)
 {
     RegisterRoutes(RouteTable.Routes);

     ...
 }

 private static void RegisterRoutes(RouteCollection routes)
 {
    routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));

    ...
 }
于 2012-06-05T08:17:07.323 に答える
1

このグローバルルールは、画像ファイル、スクリプトファイル、その他のリソース(表示されているWebResource.axdなど)を含む、要求されているすべてのリソースに適用されます。 つまり、ここで起こったことは、ルートテーブルルールによって各リクエストがセッション変数に保存され、毎回最後の値が上書きされ、セッション変数を自分で確認するまでに、WebResource.axdに残されていたということです(別のインスタンスで何か他のものになります)。

私のブログには、そのアプローチに対する1つの解決策があります:http:
//beemerguy.net/blog/post/How-to-support-dynamic-URLs-in-ASPNET-
(by-example).aspx しかし、それはC#であり、 VB.NETに変換するのは簡単なはずです。

ただし、基本的には、セッション変数に依存せずに、同じリクエストでプロスペクトURL値を処理する必要があります。他の同時リクエストでは、その値に到達する前にその値が上書きされる可能性があります。

于 2012-05-23T00:01:48.343 に答える