In this post we will talk about how we can manage on AngularJS, errors like access forbidden or unauthorized. Also we will see what kind of errors we need to throw from a MVC (WebAPI) application.
First off all, don’t try to manage the response error of each HTTP request. You should register an interceptor to HTTP request and manage there all the HTTP errors. Only custom behavior should be managed manually per request.
In the below example we register an HTTP interceptor that redirect the user to the login page when the user is unauthorized to access to access that resources (is not logged in). If you don’t manage the 401 error on the client side, the default behavior of browsers is to display the popup windows where user needs to insert his credentials (Windows Authentification), even if you have another authentication in parallel (Windows Auth. combined with token base – OWIN for example)
In the case he is not allowed to access that resources we display an alert that notify user about this.
First off all, don’t try to manage the response error of each HTTP request. You should register an interceptor to HTTP request and manage there all the HTTP errors. Only custom behavior should be managed manually per request.
In the below example we register an HTTP interceptor that redirect the user to the login page when the user is unauthorized to access to access that resources (is not logged in). If you don’t manage the 401 error on the client side, the default behavior of browsers is to display the popup windows where user needs to insert his credentials (Windows Authentification), even if you have another authentication in parallel (Windows Auth. combined with token base – OWIN for example)
In the case he is not allowed to access that resources we display an alert that notify user about this.
var Services = Services || {};
Services.httpCustomInterceptorService = function ($q, $location) {
var httpCustomInterceptorServiceFactory = {};
var responseError = function (rejection) {
if (rejection.status == 401) {
$location.path('/login');
}
if (rejection.status === 403) {
alert('Forbidden - you are not allowed to access this resource');
}
return $q.reject(rejection);
}
httpCustomInterceptorServiceFactory.responseError = responseError;
return httpCustomInterceptorServiceFactory;
};
Services.httpCustomInterceptorService.$inject = ['$q', '$location'];
You can register this interceptor using the fallowing line of code:$httpProvider.interceptors.push('httpCustomInterceptorService
');
This HTTP errors codes can be thrown by an MVC custom attribute for example:401: throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
403: throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden));
Comments
Post a Comment