在RESTful WebApi方法中检索Principal

时间:2016-11-08 22:58:05

标签: c# angularjs rest asp.net-web-api formsauthentication

我是使用WebApi的RESTful服务的新手。我有一个使用FormsAuthentication来验证用户身份的前端Web应用程序。我可以在我的MVC控制器方法中使用User.Identity属性而没有任何问题。

但是,我想使用Angular从浏览器到WebApi中的Restful方法进行Ajax调用。这些方法中的用户主体出现问题 - HttpRequestMessage.GetUserIdentity()始终返回null。相比之下,这些方法中的Thread.CurrentPrincipal正确返回当前经过身份验证的用户标识。我的WebApi控制器使用Authorize属性进行修饰。

我错过了什么让GetUserIdentity()停止工作?这是我的控制器。

[Authorize]
public class CategoryController : ApiController
{
    public IEnumerable<ICategoryJson> Get(HttpRequestMessage request)
    {
        var user = request.GetUserPrincipal();                  // returns null
        var user1 = System.Threading.Thread.CurrentPrincipal;   // returns authenticated user identity

        return null;
    }
}

这是我的Ajax电话。

$http.get("/api/Category", config).then(function (response) {
    Array.prototype.push.apply(service.list, response.data);
    service.listLoading = false;
});

1 个答案:

答案 0 :(得分:0)

MVC控制器继承自不同的基类,这就是它在MVC控制器而不是Web API中工作的原因。

在Web API 2中,您可以使用RequestContext.Principal,或者在控制器操作中使用Thread.CurrentPrincipal来获取用户身份。

我不认为这个问题与ajax或angular调用有关。你可以尝试从角度代码调用相同的MVC控制器动作,它仍然应该返回用户的身份。