2

以前、mvc アプリケーションを mvc2 から mvc 3 に更新し、先週 mvc 4 に更新しました。また、IIS6 サーバーから IIS7 サーバーに移動しました。

現在、mvc ルーティングによって生成された多くの URL には、url にトークンが含まれています。このような:

http://domain.net/(F(D4379600E44F6AF6D4695965E697E4EF18E37E9D4A33EF1DFAC33B05D8BD1C3601EC6D41276ADE9048699F26558469FB12118644813DE200464A082F0250855D8AC0825CAA33DFF40092C74D3B3AA0440D2547DEFE320118B53A1C43149B9E616D8579D2DFC35225E06055C3E4F8FF37F610729E))/page/something

このトークンは、画像を含め、ページ上のすべての URL の 70% に適用されます。Cookie を使用しないブラウザーの Forms Auth トークンのように見えます。しかし、web.config で Cookieless を無効にしました (Cookie のみに設定しました)。また、すべてのブラウザー (Cookie が有効になっている) に適用され、ユーザーがサインインしていない場合でも適用されます。

この問題を解決するには?何か案は?新しい mvc にアップグレードしたときに何かを見逃していたと思います。

アップデート。次の方法(web.config)でCookielessを無効にしようとしました:

<sessionState cookieless="false" />
<authentication mode="Forms">
  <forms loginUrl="~/LogOn" timeout="2880" cookieless="UseCookies"  />
</authentication>

UPD1. いくつかの一般的な部分ビューをレンダリングするために、マスター ページでいくつかの RenderAction コマンドを使用します。これらのパーツのコントローラ メソッドには、OututCache 属性を付けました。この属性を削除し、すべての URL が適切に表示されるようになりました。それは非常に奇妙ですが、私を助けました。

<%Html.RenderAction("BlogPosts", "Widgets", new RouteValueDictionary()); %> 


[ChildActionOnly]
    //[OutputCache(Duration = 180)]
    public ActionResult BlogPosts()
    {
        var model = new BlogListModel();
        model.BlogPostType = defService.BlogType();
        model.List = widgetService.BlogPosts(3);
        return PartialView("Widgets/BlogPostsWidget", model);
    }
4

1 に答える 1

0

cookielessこれはおそらくセッション状態属性が原因であるという他のコメント投稿者に同意します。cookieless属性を に設定するtrueと、URL にセッション ID が埋め込まれます。

例: http://yourserver/folder/(セッションID はこちら)/default.aspx

OutputCacheは、Cookie を使用しない実装とは関係がないようです。

あなたが行ったweb.config変更は、すぐには反映されなかった可能性があります。少しあいまいですが、安全のために、ファイルに変更を加えた後はアプリケーションを再起動する必要がありweb.configます。

アプリケーションを再起動し、OutputCache コードのコメントを解除し、ビルド/公開して、得られる結果を確認します。

于 2013-01-04T18:51:51.687 に答える