Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将用户标识从UI传递到数据层_C# - Fatal编程技术网

C# 将用户标识从UI传递到数据层

C# 将用户标识从UI传递到数据层,c#,C#,为了对SQL 2008数据库执行更新/插入/删除审计,我访问了 HttpContext.Current.User 在数据层中传递给存储的进程,该进程将为审核触发器设置上下文信息 这可能是错误的,因为如果我想放置另一个UI(即WinForms),HttpContext将不适用,但是我不想向BLL方法添加用户名参数或添加构造函数,因为所有这些方法都是静态的。在DAL中访问用户标识的最佳方式是什么?您应该使用静态属性。但是请注意,此属性可能不等于HttpContext.Current.User,具体

为了对SQL 2008数据库执行更新/插入/删除审计,我访问了

HttpContext.Current.User
在数据层中传递给存储的进程,该进程将为审核触发器设置上下文信息

这可能是错误的,因为如果我想放置另一个UI(即WinForms),HttpContext将不适用,但是我不想向BLL方法添加用户名参数或添加构造函数,因为所有这些方法都是静态的。在DAL中访问用户标识的最佳方式是什么?

您应该使用静态属性。但是请注意,此属性可能不等于
HttpContext.Current.User
,具体取决于web应用程序的模拟设置


一个好的解决方案可能是首先检查
HttpContext.Current
是否为空。如果没有,则从那里读取用户,否则返回到读取
Thread.CurrentPrincipal

谢谢,这也适用于WCF吗?是的。Thread.CurrentPrincipal实际上可以由应用程序/框架的任何部分设置(如果授予了必要的权限)。WCF应该相应地设置它,但它可能被覆盖。对于WCF,您可能还想看一看。我甚至不同意在DAL层中使用dependent-on-System.Web.Mvc dll,因此您只能选择Thread.CurrentPrincipal。但是,如果设置了应用程序池标识,那么从UI向DAL模拟用户的最佳方式是什么?