1

詳細ページの 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)

誰が問題になる可能性があるかを知ることができますか?

前もって感謝します。

4

1 に答える 1

0

元の URL でクエリ文字列が見つかったときに、URL を変更する別の IHttpModule がありました。したがって、私は必要なものを手に入れます。

皆さんの親切な提案と関心に感謝します。

于 2012-12-29T10:30:48.777 に答える