通过以下实现,您可以匿名访问OData$元数据,并保持对任何其他控制器的身份验证:
(如果您之前正确设置了OData服务,则会自动生成名为“metadata”的控制器-此处不包括此内容)。
1.)添加以下类
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Mvc.Authorization;
public class AuthorizeFiltersControllerConvention :
IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
if (!controller.ControllerName.Contains("Metadata"))
{
controller.Filters.Add(new AuthorizeFilter("defaultPolicy"));
}
}
}
2.)在StartUp类的ConfigureServices方法中,删除现有的addMvc方法,并添加以下内容:
services.AddAuthorization(o =>
{
o.AddPolicy("defaultPolicy", b =>
{
b.RequireAuthenticatedUser();
});
});
services.AddMvc(o =>
{
o.Conventions.Add(new AuthorizeFiltersControllerConvention());
})