所以我收到了一个要求用户注册一切正常的帖子请求,但是在帖子请求中我可以省去,说“ Name”和“ LastName”,它仍然会在我的数据库中创建帐户,但我希望如果未输入指定的值之一,则抛出错误。这是我目前拥有的代码。
os.path
我尝试过。
//Post api/Accounts/Register
[HttpPost("Register")]
public IActionResult Register([FromBody]User u, string name, string lastname, string birthday, string password, string gender, string streetname, string email, string housenumber, string addition, string postalcode, string city, string phonenumber)
{
var UserData = from user in _context.users
where (name == u.Name &&
lastname == u.LastName &&
birthday == u.Birthday &&
password == u.Password &&
gender == u.Gender &&
streetname == u.Street_Name &&
email == u.email &&
housenumber == u.House_Number &&
addition == u.Addition &&
postalcode == u.Postalcode &&
city == u.City &&
phonenumber == u.Telephone_Number)
select u;
//Check for potential errors
bool DupeMail = _context.users.Any(Dupe => Dupe.email == u.email);
bool PhoneCheck = _context.users.Any(CheckPhone => CheckPhone.Telephone_Number == u.Telephone_Number);
//Criteria check
if (DupeMail)
{
return BadRequest("Email bestaat niet of is al in gebruik");
}
if (PhoneCheck)
{
return BadRequest("Telefoon nummer bestaat niet of is al in gebruik");
}
if (DupeMail == false && PhoneCheck == false)
{
if(ModelState.IsValid)
{
_context.users.Add(u);
_context.SaveChanges();
return Ok("Account Created");
} else {
var errors = ModelState.Select(x => x.Value.Errors)
.Where(y=>y.Count>0)
.ToList();
return BadRequest(errors);
}
}
else
{
return NoContent();
}
}
但是当我这样做时,我总是被发送以返回badrequest。我将这段代码放在select u下面;
也当我Console.WriteLine(name);在返回BadRequest之前,它不会打印任何内容,因此我无法评估if(name == null),因为它始终为null,但是如何检查是否已发送指定的所有内容?
任何见解都会很棒,我不知道如何检查值是否没有通过我的身体:(
答案 0 :(得分:1)
您收到的值可能为空String
而不是null
。
您需要执行以下操作:
if (String.IsNullOrWhiteSpace(u.name)) {
return BadRequest("Please fill everything");
}
答案 1 :(得分:0)
在.NET Framework 2.0版中,没有'String.IsNullOrWhiteSpace'。
所以使用这个:
if (IsNullOrWhiteSpace(name)) return BadRequest("Please fill everything");
bool IsNullOrWhiteSpace(string txt)
{
if (txt == null) return true;
if (string.IsNullOrEmpty(txt.Trim())) return true;
return false;
}