0

我有一个我正在开发的 mvc4 内部网网站,它有一个只有少数 AD 组可以访问的 Web 前端,但我也在使用 mvc4 的 Web API 功能,我需要向所有用户开放,甚至匿名的。我曾尝试使用 Web.config,但这会阻止所有不在其中一个组中的用户。

我将如何在保持 API 开放的同时保护前端?

更新:

我只是想,我想避免使用类似的属性标记每个方法[Authorize]

4

1 回答 1

0

弄清楚了。

我只是应用了一个过滤器来检查每个控制器的命名空间。由于我所有的 API 控制器都在其中,HSServer.Controllers.Api并且所有 Web 控制器都在HSServer.Controllers.Web此代码中,因此我的FilterConfig.cs工作就像一个魅力。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new FrontendAuthorize());
        filters.Add(new HandleErrorAttribute());
    }
}

public class FrontendAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        try
        {
            if (!filterContext.Controller.GetType().Namespace.StartsWith("HSServer.Controllers.Api"))
                base.OnAuthorization(filterContext);
        }
        catch (NullReferenceException)
        {
            base.OnAuthorization(filterContext);
        }
    }
}
于 2013-03-04T03:27:39.557 回答