我有一个使用Windows身份验证的现有ASP.NET报告应用程序。很多报告生成代码都在单独的类中,并且有一个我没有编写的核心错误记录器,我认为这个错误记录器是为Windows应用程序构建的,因为它使用的是WindowsIdentity.GetCurrent()。Name。对于ASP.NET,我相信这将返回在服务器上运行ASP.NET页面的帐户。
我认为在页面上使用User.Identity.Name是正确的方法,但只能在页面上的报告生成类中使用它。有没有办法使用错误记录器类获取它而不将其作为额外参数传递。
有数百个报告类,所以我不得不经历并为每个报告添加一个参数。
答案 0 :(得分:2)
如果您可以在web.config中使用模拟:
....
<authentication mode="Windows"/>
<identity impersonate="true"/>
....
您的报告类将获得合适的用户。
如果您的报告类可以引用System.Web程序集并且您愿意修改代码,那么您也可以这样做:
HttpContext.Current.User.Identity.Name
但请确保调用者来自ASP.NET请求,否则它将抛出nullref。