我正面临着这个奇怪的问题,似乎没有所谓的监工。知道为什么吗?
public class CommandeController : Controller
{
public ActionResult Index()
{
return View("Index", MyModel);
}
public PartialViewResult FirstViewAction(MyModel model)
{
............
return PartialView("FirstView", FirstModel);
}
public PartialViewResult SecondViewAction()
{
...........
return PartialView("SecondView", SecondModel);
}
}
来自另一个普通班级:
public static class GetClaims
{
public static string tenantid { get; set; }
public static string username { get; set; }
public static bool isauthenticated { get; set; }
static GetClaims()
{
ClaimsPrincipal incomingPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
{
ClaimsIdentity claimsIdentity = incomingPrincipal.Identity as ClaimsIdentity;
username = claimsIdentity.Name;
isauthenticated = claimsIdentity.IsAuthenticated;
if (claimsIdentity.IsAuthenticated == true)
{
tenantid = incomingPrincipal.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
}
else
{
tenantid = "bla";
}
}
}
}
答案 0 :(得分:0)
确实没有充分的理由以此处的方式编写此特定示例。
有一个例子,如果您读过static constructors,将会看到在应用程序的整个生命周期中,静态构造函数只被调用一次。
因此,您的代码将对第一个触发静态构造函数的用户有效。
即使这还不足以解决问题,您仍然有一个问题,那就是任何人都可以设置您创建的静态属性,因此无法确保这些属性确实来自数据库。
如果您真的想将其保留为静态方法,请为其提供返回类型并以int
作为输入
ClaimsPrincipal
然后您可以在查询部分中使用,例如使用
public static class ClaimsManager
{
public static UserIdentityState GetClaims( ClaimsPrincipal principal )
{
if (principal == null || !principal.Identity.IsAuthenticated)
{
return UserIdentityState.NotAuthenticated;
}
return new UserIdentityState {
Name = principal.Identity.Name,
TenantId = incomingPrincipal.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid")?.Value,
IsAuthenticated = true
};
}
}
当然,您仍然必须具有我要提出的// at the using statements
using static ClaimsManager;
//... in your query statement
var claims = GetClaims( Thread.CurrentPrincipal as ClaimsPrincipal );
if (!claims.IsAuthenticated) {
return;
}
query = $"UPDATE [DB].[dbo].[CustomerData-{claims.TenantId}] SET .... ";
类的实现,以及该类的返回UserIdentityState
用户的静态方法
答案 1 :(得分:0)
我看来您的课程似乎不是静态的。我认为应该更像以下代码段。
public class GetClaims
{
public string Tenantid { get; }
public string Username { get; }
public bool Isauthenticated { get; }
GetClaims()
{
...
}
}
Static constructors仅被调用一次。
public class C {
static C() { Console.WriteLine("Static!");}
public C() { Console.WriteLine("Instance!");}
}
class Program
{
static void Main(string[] args)
{
var c1 = new C();
var c2 = new C();
}
Static!
Instance!
Instance!