我是使用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;
});
答案 0 :(得分:0)
MVC控制器继承自不同的基类,这就是它在MVC控制器而不是Web API中工作的原因。
在Web API 2中,您可以使用RequestContext.Principal,或者在控制器操作中使用Thread.CurrentPrincipal来获取用户身份。
我不认为这个问题与ajax或angular调用有关。你可以尝试从角度代码调用相同的MVC控制器动作,它仍然应该返回用户的身份。