2

我正在使用 Areas 创建一个 mvc 应用程序。我需要对这些区域使用不同的身份验证方法。

我通常使用 httpmodules 进行身份验证,在 http 模块中我检查用户是否经过身份验证(我通常使用 cookie),如果没有,我会重定向他。

所以我有一个用于验证整个应用程序的 httpmodule,我想注册另一个 httpmodule 以在该区域进行身份验证。

我试过了:

  1. 使用 area 文件夹中的 web.config 文件并在那里列出 httpmodule。
  2. 使用 web.config 文件中的位置部分。

两者都不适合我 httpmodule 从来没有被调用过。

  1. 我如何为一个区域注册一个 httpmodule。
  2. 我如何覆盖整个应用程序的 httpmodule。
  3. 如果这是错误的做法,那么更好的做法是什么。

谢谢

4

1 回答 1

2

您始终可以编写自定义 AuthorizeAttribute 来覆盖 AuthorizeCore。在此功能中,您始终可以重定向到特定的 loginurl。

public class CustomAuthorizationAttribute : AuthorizeAttribute
{
    private string notifyUrl = string.Format("{0}{1}", GeneralHelper.BaseSiteUrl, "Login");

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.User.Identity.IsAuthenticated)
        {
            // get userinformation
            return true;
        }

        httpContext.Response.Redirect(NotifyUrl);
        return false;
    }
}

如果您不包含重定向,它将被重定向到 web.config 中定义的 loginurl

于 2012-01-18T11:25:18.260 回答