在 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 用户的身份。
我不熟悉使用 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 用户的身份。