詳細ページの 1 つにわかりやすい URL アクセスを許可する IHttpModule を作成しています。ユーザーがhttp://xyx.com/hotels/123/hotel-name.aspxページを使用して詳細ページにアクセスしようとすると、IHttpModule の OnBeginRequest メソッドで書き換えルールが適用されます。
ここでは、Context.RewritePath("~/DetailPages/DetailPage.aspx", "", "Code=123") を使用してパスを "~/DetailPages/DetailPage.aspx" に変更するように書きました。ここで、123 は元の URL から取得したコードです。 .
元の URL にクエリ文字列が含まれていない場合、詳細ページが呼び出されるようになりました。しかし、ユーザーがhttp://xyz.com/hotels/123/hotel-name.aspx?show=advanceにアクセスしようとすると、書き換えコードが として実行されContext.RewritePath("~/DetailPages/DetailPage.aspx", "", "Code=123&show=advance")
ます。ここで、「/hotels/123/hotel-name.aspx」ページが存在しないというエラーが表示されます。
Context.RewritePath
" " メソッドを呼び出す前後に、Context.Request
以下に示すオブジェクトから詳細を取得しました。元の URL にクエリ文字列がない場合、どちらも完璧で同じに見えます。ただし、元の URL にクエリ文字列が含まれている場合、"Context_Error" (このリクエスト実行のエラーをリッスンするイベント) メソッド内で、取得するServer.GetLastError()
と "/hotels/123/hotel-name.aspx" ページが存在しません。
Context.Request
以下のオブジェクトからのトレースの詳細を参照してください。肯定的な結果が得られずにすでに 8 時間を費やしているため、あなたの助け/意見を歓迎します。
--------------------------- 前 - RewritePath 呼び出し ------------------- --------
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/Hotels/123/hotel-name.aspx
CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx
パラメータ: - a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4.....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1
パス: - /Hotels/123/hotel-name.aspx
PhysicalPath : - D:\AppRoot\Hotels\161\hotel-name.aspx
URL : - http://xyz.com/Hotels/123/hotel-name.aspx?a=b
--------------------------- 後 - RewritePath 呼び出し ------------------- --------
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/DetailPages/DetailPage.aspx
CurrentExecutionFilePath : - /DetailPages/DetailPage.aspx
Params : - Code=123&a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4.....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1
パス: - /DetailPages/DetailPage.aspx
PhysicalPath : - D:\AppRoot\DetailPages\DetailPage.aspx
URL : - http://xyz.com/DetailPages/DetailPage.aspx?Code=123&a=b
--- Server.GetLastError
- トレース - IHttpModule のエラー イベント内 --
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/Hotels/123/hotel-name.aspx
CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx
パラメータ: - a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1
パス: - /Hotels/123/hotel-name.aspx
PhysicalPath : - D:\AppRoot\Hotels\161\hotel-name.aspx
URL : - http://xyz.com/Hotels/123/hotel-name.aspx?a=b
エラー メッセージ ファイル '/Hotels/123/hotel-name.aspx' が存在しません。
スタックトレース
at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
誰が問題になる可能性があるかを知ることができますか?
前もって感謝します。