作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您在 Controller 上下文中,则可以访问当前经过身份验证的用户。拿一篇文章如Get the current user, within an ApiController action, without passing the userID as a parameter .
但是,如果我的 Controller 调用服务(相同的程序集),但这里我没有 Controller 上下文。
实际获得经过身份验证的用户的最佳方法是什么?
最佳答案
您可以创建一个中间服务来提供该功能
public interface IPrincipalProvider {
IPrincipal User { get; }
}
public class WebApiPrincipalProvider : IPrincipalProvider {
public IPrincipal User {
get {
return HttpContext.Current != null
? HttpContext.Current.User
: null;
}
}
}
public class MyService : IService {
private readonly IPrincipalProvider provider;
public MyService(IPrincipalProvider provider) {
this.provider = provider;
}
public MyModel MyServiceMethod() {
var currentUser = provider.User;
var name = currentUser.Identity.Name;
//...use user....
return model;
}
}
[Authorize]
public class MyController : ApiController {
public readonly IService service;
public MyController (IService service) {
this.service = service;
}
[HttpGet]
public IHttpActionResult MyGetActiom() {
var model = service.MyServiceMethod();
return Ok(model);
}
}
HttpContext
像前面提供的示例一样访问用户。 MVC 和 Web API 基本上执行类似于填充
Controller.User
的操作。和
ApiController.User
.
IHttpContextAccessor
允许服务类访问当前的
HttpContext
Controller 外
public interface IHttpContextAccessor {
HttpContext HttpContext { get; }
}
关于asp.net - 如何在 Web API 的服务上下文中访问用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45886836/
我是一名优秀的程序员,十分优秀!