2

使用: ASP.net 4.0 を使用した Visual Studio 2010

URL 書き換えを使用する Web サイトがあり、書き換えられた URL をポストバックに保持したいと考えています。この件に関する多くのトピックを読みましたが、これが可能かどうかはまだわかりません。

例えば:

http://localhost/ActualPage.aspx?PageID=4

次のように書き換えられます。

http://localhost/member/forum.aspx

このページには、Postback を使用する多数のコントロールが含まれています (たとえば、並べ替えとページングを備えた Telerik RadGrid)。通常、ポストバックが発生すると、ブラウザは書き換えられていない URL にリダイレクトされます。アドレス バー/ActualPage.aspx?PageID=4なども表示されます。このシナリオでは、すべてが正しく機能します。

ただし、ポストバック後に書き換えられた URL を保持したいので、次のようにForm.Actionプロパティを書き換えられた URL に変更するようにコーディングしました。

Page.Form.Action = "/member/forum.aspx"

これで、ページはアドレス バーに URL を正しく保持しますが"Validation of viewstate MAC failed" error、ポストバックが発生するとスローされます。これは、viewstate が別の URL から発信されているため、これも期待できます。

不思議なことに、この問題は がenableViewStateMacfalse に設定されている場合でも発生します (ページまたは でweb.config) - とにかくこれを無効にしたくありません。

事実上、私がしなければならないことは、この代替 URL からの入力を受け入れてもよいことをページ / ビューステートの mac 認証に伝えることだと思いますが、とにかくこれを行う方法を見つけることができません。それが違いを生むかどうかを確認するために別の URL 書き換えシステムを試しました。また、生成された machineKey を追加しようとしましたが、どちらも違いはありませんでした。これを行う方法はありますか?

要するに、私は欲しい:

  • 書き換えられた URL へのポストバックがある書き換えられたページ
  • ViewStateMac が有効
  • ビューステート検証エラーなし

以前のバージョンの .NET で.browserファイルを使用していたことを覚えていますFormRewriterControlAdapterが、これは .NET 4 では何の違いもないようです (とにかく URL が正常に保持されたかどうかは覚えていません)。

4

1 に答える 1

0

私は解決策を見つけました - 問題は実際には無関係で、ViewStateMac の問題として隠されていることがわかりました。

以前は、すべての URL を 1 つのページにリダイレクトし、データベース ルックアップを実行してから、Server.Transfer() を使用して正しいページをブラウザーに配信していました。実際の問題は、Server.Transfer() を使用することによって引き起こされていました。これは、ビューステートを操作する際の問題であると Microsoft によって認識されているようです。

IIS がデータベース ルックアップと書き換え全体を実行するように調整したため、Server.Transfer() は使用されません。元の問題は解決されました。

于 2012-11-25T00:48:26.367 に答える