我正在嘗試稍微清理我的代碼并創建組織良好的代碼。
我正在嘗試將一些與資料庫相關的功能從我的控制器轉移到我的存盤庫。
不幸的是,由于我的更改,某些功能丟失了。
具體來說,查找現有電子郵件的方法
舊代碼 - 控制器(有效但未組織):
public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto)
{
if (await _userRepository.UserExists(registerDto.Email))
{
return BadRequest("The Email is already in use");
}
// rest of the code
}
存盤庫
public async Task<bool> UserExists(string email)
{
return await _userManager.Users.AnyAsync(x => x.Email == email.ToLower());
}
我嘗試過的 - 控制器:(有組織但沒有按預期作業
public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto)
{
await _userRepository.UserExists(registerDto.Email);
// rest of the code
}
存盤庫
public async Task<ActionResult> UserExists(string email)
{
var user = await _userManager.Users.AnyAsync(x => x.Email == email.ToLower());
if (user =! false)
{
return BadRequest("The Email is already in use");
}
return Ok();
}
問題是,在現有電子郵件的情況下,該應用程式繼續運行并且不會拋出錯誤 - “電子郵件已在使用中”
我在這里做錯了什么?為什么會發生?
uj5u.com熱心網友回復:
user =! false
這不是評估,而是任務。你在這里做的是:
user = !false
換句話說:
user = true
換句話說,您不是在檢查是否user是true,而是將用戶設定為true
你想要的是這里
if (user)
{
return BadRequest("The Email is already in use");
}
這里的第二個問題是您的存盤庫執行return BadRequest("The Email is already in use");,但您的控制器從未對回傳值執行任何操作:
await _userRepository.UserExists(registerDto.Email);
要作業,這應該是:
return await _userRepository.UserExists(registerDto.Email);
但是,您在此處撰寫的新代碼引入了以前不存在的問題。
user不是一個偉大的名字。userExists會更好。- 存盤庫永遠不應該回傳
BadRequest,這是控制器的作業。 - 我不清楚你為什么重寫
UserExists。它正在做正確的作業,而您現在不知何故將控制器的責任強加到存盤庫中,這會引入一個錯誤而不是解決一個錯誤。
我確信您對代碼所做的更改需要撤消。舊代碼實際上寫得很好。你對它所做的是引入問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354058.html
標籤:asp.net
上一篇:C#APIHTTP動態引數
