【问题标题】:How to verify if a value is actually sent in a post request body?如何验证一个值是否实际在发布请求正文中发送?
【发布时间】:2019-01-07 09:55:40
【问题描述】:

所以我收到了一个用户注册所有工作的帖子请求,但在帖子请求中我可以省略,让我们说“姓名”和“姓氏”,它仍会在我的数据库中创建帐户,但我希望它当未输入指定的值之一时抛出错误。这是我目前拥有的代码。

//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();
        }
    }

我试过了。

if(name == null)
   {
     return BadRequest("Please fill in everything");
   }

但是当我这样做时,我总是会收到发送返回错误请求。我把这段代码放在select u下面;

当我使用 Console.WriteLine(name);在返回 BadRequest 之前它不打印任何内容,所以我无法评估 if(name == null) 因为它始终为 null 但我如何检查已指定的所有内容是否已发送?

任何见解都会很棒,我不知道如何检查一个值是否没有通过我的身体:(

【问题讨论】:

    标签: c# validation post asp.net-web-api


    【解决方案1】:

    您收到的值可能是空的String 而不是null

    你需要做这样的事情:

    if (String.IsNullOrWhiteSpace(u.name)) {
        return BadRequest("Please fill everything");
    }
    

    【讨论】:

    • 正要删除这个问题,这很简单,而不是 If(name == null) 我应该这样做 if(u.Name == null) 我以为我已经尝试过了,但我猜我还有其他一些错误。不过感谢您的建议!
    【解决方案2】:

    在 .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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多