如何在这个语句中添加另一个检查条件 C# asp.net core
How do I add another check condition in this statement C# asp.net core
我有3个这样的案例
- 当用户首次登录时,我将验证他们的请求会话 ID 以构建 cookie
- 当用户已经通过身份验证(之前已登录)时,我将根据他们的声明验证 sessionId。
然而还有另外两种情况出现
当用户已经通过身份验证(之前已登录)时,执行某些 activity,这可能会提示更改他们的会话 ID,现在如果我使用来自的会话 ID 进行验证他们声称这是错误的,所以我必须检测 claimSessionId 和 requestSessionId 之间是否有变化 => 验证他们的 requestSessionId。
用户登录后,用户执行的某些请求不会发送 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();
但是,由于可读性问题,我不推荐它。
我有3个这样的案例
- 当用户首次登录时,我将验证他们的请求会话 ID 以构建 cookie
- 当用户已经通过身份验证(之前已登录)时,我将根据他们的声明验证 sessionId。
然而还有另外两种情况出现
当用户已经通过身份验证(之前已登录)时,执行某些 activity,这可能会提示更改他们的会话 ID,现在如果我使用来自的会话 ID 进行验证他们声称这是错误的,所以我必须检测 claimSessionId 和 requestSessionId 之间是否有变化 => 验证他们的 requestSessionId。
用户登录后,用户执行的某些请求不会发送 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();
但是,由于可读性问题,我不推荐它。