Как мне настроить мой проект mvc / webapi так, чтобы метод webapi, вызываемый из представления бритвы, не возвращал страницу входа в систему, когда она неавторизована?
Это приложение MVC5, которое также имеет контроллеры WebApi для вызовов через javascript.
Два метода ниже
[Route("api/home/LatestProblems")]
[HttpGet()]
public List<vmLatestProblems> LatestProblems()
{
// Something here
}
[Route("api/home/myLatestProblems")]
[HttpGet()]
[Authorize(Roles = "Member")]
public List<vmLatestProblems> mylatestproblems()
{
// Something there
}
вызываются через следующий угловой код:
angular.module('appWorship').controller('latest',
['$scope', '$http', function ($scope,$http) {
var urlBase = baseurl + '/api/home/LatestProblems';
$http.get(urlBase).success(function (data) {
$scope.data = data;
}).error(function (data) {
console.log(data);
});
$http.get(baseurl + '/api/home/mylatestproblems')
.success(function (data) {
$scope.data2 = data;
}).error(function (data) {
console.log(data);
});
}]
);
Итак, я не вошел в систему, и первый метод успешно возвращает данные. второй метод возвращает (в функции успеха) данные, которые содержат эквивалент страницы входа в систему. то есть, что вы получили бы в mvc, если бы вы запросили действие контроллера, отмеченное [Авторизовать], и вы не вошли в систему.
Я хочу, чтобы он возвращал 401 неавторизованный, чтобы я мог отображать разные данные для пользователей в зависимости от того, вошли они в систему или нет. В идеале, если пользователь вошел в систему, я хочу иметь доступ к свойству User контроллера, чтобы я мог возвращать данные, специфичные для этого члена.
ОБНОВЛЕНИЕ: поскольку ни одно из приведенных ниже предложений, похоже, больше не работает (изменения в Identity или WebAPI), я создал необработанный пример на github, который должен проиллюстрировать проблему.