1

次のように、[HttpGet] を使用するパブリック ASP.NET MVC アクションがあります。

[HttpGet]
public ActionResult List(OrganizationFilterModel p_model) {
    ...
}

ユーザーが有効なユーザー セッションなしでページを要求すると、ログイン ページにリダイレクトされます。ログイン システムは、ログイン後に最初に要求された URL にリダイレクトします。

このページでは、特定の状況下で、ログイン システムから元の URL へのリダイレクトにより、例外がスローされます。

コントローラ "MyApp.Controllers.OrganizationController" でパブリック アクション メソッド "List" が見つかりませんでした。ただし、単にページを再リクエストすると、その後のすべてのリクエストで正常に表示されます。

条件とその他の注意事項:

  1. ユーザーは有効な FormsAuth チケットを持っています。[意味、彼らは最近ログインしました]
  2. 期限切れまたは AppDomain のリセットにより、ユーザーのセッションが失われました。
  3. 削除[HttpGet]すると問題が解決します。[失敗したリクエストはGETでしたが]

これらの条件下では、[HttpGet]フィルターが存在すると、MVC がアクションを見つけることができなくなりますが、最初の要求でのみ発生します。後続のすべてのリクエストは正常に機能します。

Fiddler は次のパターンを示します。

  • /Organization/List に GET -->ログイン ページに 302 を返す
  • /アカウント/ログインのGET
  • /Account/Login への POST [ユーザーがログインし、リダイレクトされる]
  • /Organization/List の GET -->エラーがスローされる
  • /Organization/List の GET -->リクエストを繰り返すと正常に動作します

概要:フィルターがアクションの検索を妨げていますが、これは最初の要求でのみであり、GET 要求[HttpGet]であるにもかかわらずです。

どうしたの?

更新: 追加情報を追加するには:

  1. MVC 4 の使用
  2. [Authorize]FormsAuth を使用しますが、属性は使用しません。OnActionExecutingリクエストが認証されたが、有効なセッションがない場合にログインを強制するカスタム コードがあります。(実際には、いくつかの静的な便利なメソッドと構成設定に FormsAuth を使用しています)
  3. FormsAuth がログイン ページへのリダイレクトを引き起こす場合、この問題は発生しません。この問題は、カスタム コードによってリダイレクトが発生した場合に発生します。
  4. FormsAuth を完全に削除すると、問題も修正されます。

FormsAuth を削除すると問題が解決するので、しばらくやりたかったので、トラブルシューティングを中止します。これが FormsAuth + MVC [または FormsAuth + Routing] の欠陥なのか、それとも私が愚かなことをしたのか知りたいです。

4

0 に答える 0