Получение принципала в методе 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 из углового кода, и оно все равно должно вернуть личность пользователя.

Другие вопросы по тегам