Jak skonfigurować mój projekt mvc / webapi, aby metoda webapi wywoływana z widoku brzytwy nie zwracała strony logowania, gdy jest nieautoryzowana?
Jest to aplikacja MVC5, która ma również kontrolery WebApi do połączeń przez javascript.
Dwie metody poniżej
[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
}
są wywoływane za pomocą następującego kodu kątowego:
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);
});
}]
);
Więc nie jestem zalogowany, a pierwsza metoda z powodzeniem zwraca dane. druga metoda zwraca (w funkcji sukcesu) dane, które zawierają odpowiednik strony logowania. tzn. co dostaniesz w mvc, jeśli poprosisz o akcję kontrolera, która została opatrzona opcją [Autoryzuj] i nie byłeś zalogowany.
Chcę, aby zwracał 401 bez upoważnienia, dzięki czemu mogę wyświetlać różne dane dla użytkowników na podstawie tego, czy są zalogowani, czy nie. Idealnie, jeśli użytkownik jest zalogowany, chcę mieć dostęp do właściwości Użytkownik kontrolera, aby móc zwrócić dane właściwe temu członkowi.
AKTUALIZACJA: Ponieważ żadna z poniższych sugestii wydaje się już nie działać (zmiany w Tożsamości lub WebAPI), stworzyłem surowy przykład na github, który powinien zilustrować problem.