我有一个ASP.NET OData站点,该站点在WebApiConfig文件中具有以下内容:

config.Filters.Add(new AuthorizeAttribute())


这将强制所有调用方在调用任何控制器之前进行身份验证。
不幸的是,这也迫使用户认证访问“ $ metadata” URL。
我需要全局强制所有控制器访问进行身份验证,同时还允许匿名访问“ $ metadata” URL。

最佳答案

创建一个从AuthorizeAttribute派生的自定义过滤器,并覆盖IsAuthorized方法,如下所示:

public class CustomAuthorizationFilter : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        if (actionContext.Request.RequestUri.AbsolutePath == "/$metadata" ||
            actionContext.Request.RequestUri.AbsolutePath == "/%24metadata")
        {
            return true;
        }

        return base.IsAuthorized(actionContext);
    }
}


注册过滤器:

config.Filters.Add(new CustomAuthorizationFilter());

关于asp.net - 当站点具有全局AuthorizeAttribute时,ASP.NET允许匿名访问OData $ metadata,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35894875/

10-13 01:14