Как мне настроить проект 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 код:
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, если бы вы запросили действие контроллера, которое было отмечено с помощью [Authorize], и вы не вошли в систему.
Я хочу, чтобы он возвратил 401 несанкционированных, так что я могу отображать разные данные для пользователей на основе того, вошли ли они в систему или нет. В идеале, если пользователь зарегистрирован, я хочу иметь доступ к свойству User Controller, чтобы я мог возвращать данные, специфичные для этого члена.
ОБНОВЛЕНИЕ: Поскольку ни одно из приведенных ниже предложений больше не работает (изменения в Identity или WebAPI), я создал исходный пример github, которые должны иллюстрировать проблему.