Получение принципала в методе RESTful WebApi
Я новичок в службах RESTful, использующих WebApi. У меня есть интерфейсное веб-приложение, которое использует FormsAuthentication для аутентификации пользователей. Я могу использовать User.Identity
свойство без проблем в моих методах контроллера MVC.
Тем не менее, я хочу использовать Angular для вызова Ajax из браузера в методы Restful в WebApi. Проблема возникает с пользовательским принципалом в этих методах - HttpRequestMessage.GetUserIdentity()
всегда возвращает ноль. В отличие от Thread.CurrentPrincipal
в этих методах корректно возвращает аутентифицированный в настоящее время идентификатор пользователя. Мой контроллер WebApi украшен Authorize
приписывать.
Что мне не хватает, что останавливает GetUserIdentity()
с работы? Вот мой контроллер.
[Authorize]
public class CategoryController : ApiController
{
public IEnumerable<ICategoryJson> Get(HttpRequestMessage request)
{
var user = request.GetUserPrincipal(); // returns null
var user1 = System.Threading.Thread.CurrentPrincipal; // returns authenticated user identity
return null;
}
}
И вот мой Ajax-вызов.
$http.get("/api/Category", config).then(function (response) {
Array.prototype.push.apply(service.list, response.data);
service.listLoading = false;
});
1 ответ
Контроллер MVC наследуется от другого базового класса, поэтому он работает в контроллере MVC, а не в веб-API.
В Web API 2 вы можете использовать RequestContext.Principal или, как вы использовали Thread.CurrentPrincipal в действии вашего контроллера, чтобы получить удостоверение пользователя.
Я не думаю, что эта проблема связана с ajax или угловым вызовом. вы можете попытаться вызвать то же действие контроллера MVC из углового кода, и оно все равно должно вернуть личность пользователя.