Come configuro il mio progetto mvc / webapi in modo che un metodo webapi chiamato da una vista rasoio non ritorni la pagina di accesso quando non è autorizzato?
È un'applicazione MVC5 che ha anche controller WebApi per le chiamate tramite JavaScript.
I due metodi seguenti
[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
}
sono chiamati tramite il seguente codice angolare:
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);
});
}]
);
Quindi non ho effettuato l'accesso e il primo metodo restituisce correttamente i dati. il secondo metodo restituisce (nella funzione Success) dati che contengono l'equivalente di una pagina di accesso. ad es. cosa otterresti in mvc se richiedessi un'azione del controller contrassegnata con [Autorizza] e non hai effettuato l'accesso.
Voglio che restituisca un 401 non autorizzato, in modo da poter visualizzare dati diversi per gli utenti in base al fatto che abbiano effettuato l'accesso o meno. Idealmente, se l'utente ha effettuato l'accesso, desidero poter accedere alla proprietà Utente del controllore in modo da poter restituire dati specifici per quel membro.
AGGIORNAMENTO: Dal momento che nessuno dei seguenti suggerimenti sembra funzionare più (modifiche a Identity o WebAPI), ho creato un esempio grezzo su github che dovrebbe illustrare il problema.