在 RESTful WebApi 方法中检索委托人

Retrieving the Principal in a RESTful WebApi method

我不熟悉使用 WebApi 的 RESTful 服务。我有一个使用 FormsAuthentication 对用户进行身份验证的前端 Web 应用程序。我可以在我的 MVC 控制器方法中毫无问题地使用 User.Identity 属性。

但是,我想使用 Angular 从浏览器对 WebApi 中的 Restful 方法进行 Ajax 调用。这些方法中的用户主体会出现问题 - HttpRequestMessage.GetUserIdentity() 始终 returns null。相比之下,这些方法中的 Thread.CurrentPrincipal 正确地 returns 当前经过身份验证的用户身份。我的 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;
});

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

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

我认为此问题与 ajax 或 angular 调用无关。您可以尝试从 angular 代码调用相同的 MVC 控制器操作,它应该仍然是 return 用户的身份。