I'm working on an ASP.NET Core MVC application and I want to be able to better handle what happens when an unauthenticated user runs an action through AJAX.
I found this solution that essentially extends the Authorize
attribute's logic and sets an AJAX request's status code to 401
when user is no longer authenticated. The status code is returned to a global AJAX error handler and the appropriate action can be performed.
I'm trying to create the attribute in Core 3.1 but I cannot find a way to first run the base logic of the filter. base.OnAuthorization
method is not there. I specifically don't want to rewrite the Authorize
attribute's functionality - only to extend it.
How can I extend the Authorize
attribute's logic in Core 3.1?
The authorize attribute I'm writing:
public class AuthorizeUserAttribute : AuthorizeAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
base.OnAuthorization(context); //method does not exist
OnAjaxAuthorization(context);
}
internal void OnAjaxAuthorization(AuthorizationFilterContext context)
{
if (context.HttpContext.User.Identity.IsAuthenticated == false)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
}
}
}
}
Just as a side note, I was thinking of writing a ActionFilterAttribute
to run the additional code instead, but I can't do that because the Authorize
attribute always runs first.