【发布时间】:2014-11-12 09:39:58
【问题描述】:
我在使用 asp.net web-api 时遇到了设计问题,想知道如何解决这个问题
public abstract class BaseApiController<TEntity> : ApiController where TEntity : Entity
{
protected string GetUsername()
{
return Utilities.GetUsername(Request.Headers.Authorization);
}
//some other code
}
public class StakeholderApiController : BaseApiController<Stakeholders>
{
ILogger _logger = new CustomApiLogger("StkhManager", GetUsername())
//some other code
}
现在我遇到的问题是:
我有 BaseApiController,我正在使用它在所有 ApiController 之间共享某些功能。
然后我为某些未共享的功能指定了一些 ApiController。
现在在进行日志记录时,我确实想记录登录用户名,问题是我每次创建新实例时都必须传递它,有没有办法可以使当前登录用户名全局api 请求,以便它可以在任何地方访问。
我不能将其设为静态,否则对于其他人的请求,它会给出错误的用户名。
有没有办法可以避免每次都通过它。鉴于webapi是无状态的,所以无法使用session,还有什么办法吗??
我正在使用 angularjs 前端,因此我没有使用 MVC/.net 提供的任何授权技术
注意:
由于某些原因,我无法将 Logger 的创建移至基类
这只是一个例子,我想在很多其他地方使用登录用户的名字。因此不想传递它。
【问题讨论】:
-
您是否尝试过使用
Thread.CurrentPrincipal.Identity.Name? -
我在客户端使用 angularjs,因此到目前为止没有设置任何与 CurrentPrincipal 相关的内容。但如果你能分享我如何设置它的代码,那就太好了......
标签: session asp.net-web-api stateless