16

BasePageクラスには、すべての ASPX ページの派生元である次のものがあります。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    ViewStateUserKey = Session.SessionID;
}

にもmachineKeyセットがありWeb.configます。これは私の開発マシンでも発生するため、このエラーは Web ファームが原因ではないと思います。

ホストが .NET 3.5 SP1 にアップグレードされました。この更新後、ViewStateUserKey上記の設定でコンパイルするたびに、すべてのポストバックで「viewstate MAC の検証に失敗しました」というエラーが常に発生します。

ここで何が間違っていますか?この設定は、最新のフレームワークの更新でもう必要ですか?

4

5 に答える 5

18

OK - 私は会話に 1 年遅れています - しかし、これはどのように正しい答えですか? これは、認証されたユーザーの場合にのみ適用さViewStateUserKeyれ、ユーザー名として を使用すると、セッション ID GUID よりも推測がはるかに簡単になります。

ところで、コードを一番上に「修正」したい場合は、セッション ID を使用しますが、セッション ID が毎回変更されないようにするには、セッション変数を設定する必要があります。元。 Session["Anything"] = DateTime.Now

ViewStateUserKey = Session.SessionID;

もちろん、これはセッションを使用することを前提としています。それ以外の場合は、ユーザー名や Cookie に保持されている他の GUID など、使用する他のキーが必要です。

于 2010-09-30T02:03:39.790 に答える
3

コードを次のように変更して、今のところ修正しました。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if (User.Identity.IsAuthenticated)
        ViewStateUserKey = User.Identity.Name;
}
于 2009-09-13T20:01:58.417 に答える
2

EnableViewStateMac @Page 属性を使用して ViewState MAC エンコーディングを無効にすることはできますか?

于 2009-09-13T17:30:31.710 に答える
0

非常に奇妙なことに、私も同様の問題を 3 日間抱えていましたが、解決しました。1. フォーム認証を有効にして、ssl false を設定しました

<forms defaultUrl="~/" loginUrl="~/Account/Login.aspx" requireSSL="false" timeout="2880" />
  1. しかし、私の httpcookies タグには、requireSSL=true がありました。Site.Master.cs では Cookie を使用して ViewStateUserKey を設定するため、問題が発生していました。

  2. したがって、エラーが発生していました。

  3. これをfalseに変更し、Webアプリを再起動しましたが、今ではすべて問題ありません。

于 2015-02-16T08:00:15.470 に答える