Я пытаюсь реализовать пользовательскую авторизацию и не могу заставить роли пройти через атрибут. Если я запускаю свой код, он попадает в класс 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());
}
}