如何在这个语句中添加另一个检查条件 C# asp.net core

How do I add another check condition in this statement C# asp.net core

我有3个这样的案例

  1. 当用户首次登录时,我将验证他们的请求会话 ID 以构建 cookie
  2. 当用户已经通过身份验证(之前已登录)时,我将根据他们的声明验证 sessionId。

然而还有另外两种情况出现

  1. 当用户已经通过身份验证(之前已登录)时,执行某些 activity,这可能会提示更改他们的会话 ID,现在如果我使用来自的会话 ID 进行验证他们声称这是错误的,所以我必须检测 claimSessionId 和 requestSessionId 之间是否有变化 => 验证他们的 requestSessionId。

  2. 用户登录后,用户执行的某些请求不会发送 requestSessionId,因此 requestSessionId 为空,那么在这种情况下,我们将采用 claimSessionId。不过,这应该是最后一种情况。你建议我们如何处理?

var sessionToValidate = !UserPreviouslySignedIn() 
                ? GetRequestSessionId()
                : GetClaimSessionId();

await ValidateUserRequest(context, sessionToValidate);

如何应用检查条件,即用户之前可能已登录但如果 sessionId != claimId 然后验证 sessionid 到此代码块并且没有一堆 if 条件?

如果我理解正确,那么我的诚实意见是,您试图一次做太多事情,这会使其他开发人员(包括我们这里的 SO)在审查或维护您的代码时感到困惑。保持简单:

sessionToValidate = null;
if (!UserPreviouslySignedIn())
    sessionToValidate = GetRequestSessionId();
else {
    if (GetRequestSessionId() != GetClaimSessionId())
        sessionToValidate = GetRequestSessionId();
    else
        sessionToValidate = GetClaimSessionId();
}

为了简化这一点并使其更容易理解;您最常见的结果是请求会话 ID,如上所示,因此默认为:

var sessionToValidate = GetRequestSessionId();

然后,由于您的最终条件要求用户登录并且请求 ID 与声明 ID 相匹配,因此将其链接在一起进行一次检查:

if (UserPreviouslySignedIn() && sessionToValidate == GetClaimSessionId())
    sessionToValidate = GetClaimSessionId();

这导致更简单的代码:

var sessionToValidate = GetRequestSessionId();
if (UserPreviouslySignedIn() && sessionToValidate == GetClaimSessionId())
    sessionToValidate = GetClaimSessionId();

根据您最初的要求,可以使用条件赋值运算符来实现:

sessionToValidate = !UserPreviouslySignedIn() ? GetRequestSessionId() :
                    GetRequestSessionId() != GetClaimSessionId() ? GetRequestSessionId() :
                                                                   GetClaimSessionId();

但是,由于可读性问题,我不推荐它。