URL書き換え+ Asp.Netログインフォーム=死
-
03-07-2019 - |
質問
このサイトでは、大量のデータベース生成ページを生成するために、URLの書き換えを行っています。すべてのページに、ユーザー用のログインコントロールがあります。このように:
内部aspxページ:/DB.aspx?id=123 ユーザーに表示されるURL:/ABC/123.aspx、/ABC/456.aspx ...(URLの書き換え)
残念ながら、各ページのタグには、" DB.aspx?id = 123"のアクション属性があります。ユーザーがボタンをクリックすると、ブラウザは/ABC/DB.aspx?id=123に投稿しますが、これはもちろん存在しません。
私が試した解決策: 1. HtmlFormをサブクラス化してアクション属性を変更します。これにより、サイト上の他のすべてのフォームが破壊されます。 2.アクション属性を削除します(ブラウザが常に同じURLに投稿するように)。これは、書き換えられたページで機能しますが、" /" (ルートディレクトリのdefault.aspx)" /"では動詞投稿が許可されていないというメッセージが表示されます。 (iis 6とiはマッピングを制御できません)
誰か?
解決
scott guのこの本当に素晴らしいブログ投稿 http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx 。
"具体的には、新しいASP.NET 2.0コントロールアダプターの拡張性アーキテクチャを利用して、コントロールのレンダリングをカスタマイズし、その「アクション」をオーバーライドできます。属性値と指定した値。これにより、.aspxページのコードを変更する必要はありません
「URL書き換えによるASP.NET PostBacksの処理」セクションを確認し、彼が正常に投稿したアダプターを使用しました。
cookielessセッションを使用するときにurl rewriteを使用すると、asp.netにいくつかの問題があり、書き換えられたurlは元のページよりも深いことに注意してください。 (/ abc / apage vs. / db?)。問題はフレームワークのソースコードに直接あり、回避策がありますが、それは完全な主題です(トレードオフ:( ...同じレベルにしたいかもしれません)。
他のヒント
セマンティクスかもしれませんが、アクション属性=" DB.aspx?id = 123"または" /DB.aspx?id = 123&quot ;? URLの書き換えで物理ページへのパススルーが許可されていると仮定すると、これが問題になる可能性があります。
やったことはありませんが、Reflectorを使用してコードを見たので、次のように修正できると思います。
ページ上:
this.Form.Action = null;
または:
this.Form.SetAttribute("action", null);
それでもうまくいかない場合は、必要なパスを設定するだけです:
this.Form.SetAttribute(" action&quot ;," ABC / 123.aspx");
ASP.NET 3.5 SP1にアップグレードする場合、アクションプロパティは適切に認識され、分離コードから設定。