В настоящее время я разрабатываю веб-API с использованием типа проекта API MVC 4. Я сейчас на этапе, когда мне нужно добавить некоторую безопасность в API. Я знаю атрибут Authorize, однако клиент предпочел бы другой подход. Для этого я попытался переопределить атрибут Authorize в своем собственном классе, и в качестве базового старта у меня просто есть AuthorizeCore, всегда возвращающий false, что должно означать не аутентификацию. Если я добавлю это к Action в контроллер, действие всегда будет завершено, и я всегда получаю данные. Я считаю, причина может быть связана с тем, что пользовательский атрибут не зарегистрирован в файле web.config, однако я не уверен, как это сделать, если вы не используете проверку подлинности форм.
Код, который я использую для тестирования, представляет собой новый проект веб-API MVC 4 с пользовательским атрибутом, показанным ниже.
public class Auth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("http://www.google.com");
}
}
Затем я добавил атрибут в метод Get по умолчанию ValuesController как таковой
[Auth]
public IEnumerable<string> Get()
Однако, когда я перехожу к домену /api/Values, я всегда представляю данные вместо ожидаемого перенаправления на google. Любая помощь приветствуется.
Изменить: после осмотра еще немного я нашел это здесь: http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx Это говорит о том, что я выбрал неправильный неправильный класс AuthorizeAttribute, поскольку я выбрал тот из System.Web.MVC, а не один из System.Web.Http. Похоже, что версия Http не позволяет использовать тот же уровень конфигурации, что и версия MVC, поскольку она не позволяет мне переопределить AuthorizeCore. Любую помощь по этому поводу оценивают.