1

私のアプリケーション (MVC4/C#) は SimpleMembershipProvider を使用しており、通常は正常に動作します。しかし、調査とテストに何時間も費やした後も解決できない問題があります。

アプリケーションを一定時間 (たとえば 30 分間) 放置してからメニュー項目を選択すると、ページがレンダリングされます (サイドバー/ヘッダー/フッター) が、@RenderBody セクションは ~/Account/Login アクションにリダイレクトされます。

次に、ログインを無視して(メニューから)コントローラーアクションリンクをクリックすると、期待どおりにロードされます。カミソリ レイアウト ビューは私が認証されていると正しく認識しているようですが、コントローラーは私が承認されているとは認識していません。[Authorize] 属性を持つ、継承元のほとんどのコントローラーの基本クラスがあります。

ログアウトすると、~/Account/Login アクションの RenderBody セクションのみが期待どおりにレンダリングされます。

web.config から

<system.web>
  <roleManager enabled="true" />
  <authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
  </authentication>

ベースコントローラー

[Authorize]
public abstract class AuthorizeBaseController : Controller
{
}

コントローラー

public class SiteController : AuthorizeBaseController 
{
    private SiteContext db = new SiteContext();

    public ActionResult Index()
    {
        return View(db.Sites.ToList());
    }

        :

_Layout.cshtml

:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Styles.Render("~/Content/menubar.css")
</head>
<body>
@if (Request.IsAuthenticated)
{
    <div id="header">
        :
    </div>
    <div id="sidebar">
        :
    </div> <!-- sidebar -->
}

<div id="body">
    @RenderBody()
</div>

@if (Request.IsAuthenticated)
{
    <footer>
        :
    </footer>
}
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>
4

2 に答える 2

0

この問題は、SimpleMembershipProvider が原因でした。つまり、InitializeSimpleMembershipAttribute() の前に Authorize フィルターが呼び出されることがありました。

Scott Allenのブログのより詳細な説明を参照しているこの投稿から解決策を得ました

于 2013-10-20T20:12:37.920 に答える
0

なぜなら

[Authorize]

AuthorizeAttribute は、組み込みの Attribute の MVC です。独自のカスタマイズ Attribute を作成します。期待通りの結果が得られます。

今すぐ、すべてのコントローラーとアクションからこの Authorize 属性を削除すると、問題が解決されます。

于 2013-10-17T06:31:58.083 に答える