Asp.net web api 使用CSLA后端实现WEB API时出现“无法设置两次默认主体对象”错误

Asp.net web api 使用CSLA后端实现WEB API时出现“无法设置两次默认主体对象”错误,asp.net-web-api,csla,Asp.net Web Api,Csla,谁能帮我留点头发吗 我正在尝试为旧的CSLA1.x/2.x时代项目创建asp.NETWebAPI接口。我正在通过各种方式对每个请求的登录进行硬编码来进行测试,包括在启动代码中硬编码一次、作为授权请求过滤器硬编码一次、在单个路由请求中硬编码一次等。我尝试的所有方式都只完美地工作了一次,然后我得到了臭名昭著的: “默认主体对象不能设置两次。” BusinessPrincipal.vb中的异常是的,我知道它非常旧,但它是发布的软件,我无法升级CSLA 我知道有一个问题需要设置HttpContext.C

谁能帮我留点头发吗

我正在尝试为旧的CSLA1.x/2.x时代项目创建asp.NETWebAPI接口。我正在通过各种方式对每个请求的登录进行硬编码来进行测试,包括在启动代码中硬编码一次、作为授权请求过滤器硬编码一次、在单个路由请求中硬编码一次等。我尝试的所有方式都只完美地工作了一次,然后我得到了臭名昭著的:

“默认主体对象不能设置两次。”

BusinessPrincipal.vb中的异常是的,我知道它非常旧,但它是发布的软件,我无法升级CSLA

我知道有一个问题需要设置HttpContext.Current.User=Thread.CurrentPrincipal;由于WebAPI的一些内部工作,我已经这样做了,这并没有解决问题

我想知道是否有人实现了web api前端,以及他们是如何处理这个问题的,或者有人提出了什么样的解决方案


最坏的情况是,如果我至少可以登录一次并保留相同的主体而不丢失它,我可以实现第二层安全性,这是可以接受的,除非有其他方法可以只登录一次而不丢失该主体吗?

BusinessPrincipal类将在您的代码库中,不是CSLA本身。Security命名空间确实包含BusinessPrincipalBase,它可能是BusinessPrincipal的基类

该命名空间中的类是

确实,您只能调用AppDomain.SetPrincipalPolicy一次,但您应该能够多次设置Thread.CurrentPrincipal和HttpContext.Current.User