asp.net mvc 4 - route - código de estado de retorno no autorizado para IActionFilter personalizado en WebAPI
web api return json example (1)
Probablemente lo mejor sea atenerse a una excepción, pero al utilizar la excepción HttpResponseException, que también devolverá un código de estado Http.
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
Buena pregunta here sobre esto.
PD
Puede ser más simple / más limpio implementar ActionFilterAttribute
public class AccessActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var result = //code to see if they have permission returns either 0 or 1
if (result==0)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
}
base.OnActionExecuting(actionContext);
}
}
Estoy trabajando con asp.net WebAPI y necesito crear un ActionFilter personalizado que realice una comprobación rápida para ver si el usuario que solicita el URI debería poder recuperar los datos.
Ya han sido autorizados para utilizar el servicio web a través de la autenticación básica y su función se ha validado a través de un proveedor de funciones personalizado.
Lo último que debo hacer es verificar que tengan permiso para ver los datos que solicitan con un parámetro en su URI.
Aquí está mi código:
public class AccessActionFilter : FilterAttribute, IActionFilter
{
public System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken, Func<System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>> continuation)
{
var result = //code to see if they have permission returns either 0 or 1
if (result==0) {
throw new ArgumentException("You do not have access to this resource");
}
return continuation();
}
}
Actualmente, solo lanzo un error que no es lo que quiero, prefiero devolver System.Net.HttpStatusCode.Unauthorized
pero estoy un poco molesto por el método que anulo y realmente no lo entiendo completamente.
¿Cómo haría para devolver ese valor?