我正在尝试实现自定义授权,并且无法通过属性获得角色。如果我运行我的代码,它将击中BasicAuth类,但无法获得任何角色值。我什至尝试为该类创建一个新的“ AllowedRoles”属性,但这也不起作用。我究竟做错了什么?如何通过自定义属性传递值?
public class BasicAuthAttribute : AuthorizeAttribute
{
private const string Realm = "my.api.com";
public override void OnAuthorization(HttpActionContext actionContext)
{
var r = Roles; // NULL?
//more code that's not relevant
}
public class ValuesController : ApiController
{
// GET api/<controller>
[BasicAuth(Roles = "admin")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Basic Auth Attribute
config.Filters.Add(new BasicAuthAttribute());
}
}