ASP.NET 的自定义控件依赖于 System.Web(更具体地说,System.Web.Security)中的 Membership 库。只要您使用这些控件(例如,<asp:Login>
控件),您就已经依赖于 System.Web。在这种情况下,应用程序的任何层都可以执行以下操作来检索当前用户:
using System.Web.Security;
...
MembershipUser user = Membership.GetUser();
然后用于user.UserName
检索用户的用户名。
更新以反映对图层托管在不同服务器上的理解。
我将向 BLL 添加一个 StartSession() 方法,该方法将用户名作为参数,并返回一个字符串会话 ID。服务器上的 BLL 生成会话 ID(可能使用 Guid)并使用 BLL 端缓存来保存用户名。然后在客户端,设置一个包含会话 ID 的 cookie。它将与 Web 请求一起提交。(根据您提交网络请求的方式,您可能需要使用 javascript 设置 cookie 值。)
这样您就不必修改方法的签名,但仍然可以通过使用缓存从 BLL 中获取用户名。您必须确保您的登录页面调用 GetSession() 方法,并在提交更多请求之前设置会话 cookie。