In our asp.net mvc/web api project, we want to customize the authorization using AuthorizeAttribute. We have noticed that there are two different AuthorizeAttribute, one in System.Web.MVC namespace for MVC and the other in System.Net.Http namespace for web api.
It works in MVC, our code like this:
public class MyPrincipal : IPrincipal
{
    //some custom properties
    public bool IsValid()
    {
        //custom authentication logic
    }
    private IIdentity identity;
    public IIdentity Identity
    {
        get { return this.identity; }
    }
    public bool IsInRole(string role)
    {
        return true;
    }
}
//override AuthorizeCore
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        MyPrincipal user = new MyPrincipal();
        if (user.isValid())
        {
            httpContext.User = user;
        }
        else
        {
            httpContext.Response.Redirect("~/Common/NoAuthorize", true);
        }
    }
}
[MyAuthorizeAttribute]
public class BaseMyController : Controller
{
    protected virtual new MyPrincipal User
    {
        get { return HttpContext.User as MyPrincipal; }
    }
}
Then in MVC controller,we can get the user information via MyPrincipal user property.
However, when we start to use the same way in web api, we found that the web api has no HttpContext property and in System.Web.Http.AuthorizeAttribute, the method to be override accepts a HttpActionContext argument, it also has no HttpContext property or some where else we can set the MyPrincipal instance.
I notice that the System.Web.Http.AuthorizeAttribute summary says 
Specifies the authorization filter that verifies the request's IPrincipal
It seems that there is some other way to set the IPrincipal instance.
I have no idea about it, any good advice? By the way, why does the asp.net web api controller have no HttpContext? Is there any design pattern about it? 
The related questions ASP.NET MVC - Set custom IIdentity or IPrincipal
 
     
     
     
     
    