如何使用 MVC 模型成功 return BadRequest?

How would one successfully return a BadRequest with an MVC Model?

我的目标是创建一个传递对象的错误请求响应。这样做的原因是为了与我的 return 类型保持一致。我尝试将序列化为 JSON 序列化,但响应与发送对象不同。

因此,如果有任何方式可以发送此信息,我们将非常高兴知道。另外,我知道在 .NET 核心中有一种方法可以做到这一点,但我宁愿只使用 .Net,因为我有更多的选择,而且我正在与依赖它的其他项目合作。


    // POST: api/postLogin
    [AllowAnonymous]
    [System.Web.Http.HttpPost, System.Web.Http.Route("postlogin")]
    public async Task<IHttpActionResult> PostLogin(LoginDTO login)
    {    
       OutputDTO<LoginDTO> output = new OutputDTO<LoginDTO>();

       LoginDTO loginDTO = null;
       try
       { 
          if (!ModelState.IsValid)
          {
             output.Success = false;
             output.SetValidations(ModelState);
             output.ErrorMessage = "Invalid Model";                   
             return BadRequest(output);
          }
          login newLogin = new login();

          string encryptedPassword = Crypto.ApplyPasswordObfuscation(login.Password, true);
          login loginUser = await _context.login.SingleOrDefaultAsync(m =>
                          m.name == login.Username && m.password == encryptedPassword);

          if (loginUser == null)
          {
             output.Success = false;
             output.ErrorMessage = "Invalid login credentials";
             var json = new JavaScriptSerializer().Serialize(output);
             return BadRequest(json); // Not 401, since you don't want to return to the login page. Client will be already on login page
          }
          else
          {
             loginDTO = new LoginDTO(loginUser);
             output.Success = true;
             output.Results = new List<LoginDTO>
             {
                loginDTO
             };
             return Ok(output);
          }                
       }
       catch (Exception e)
       {
          output.Success = false;                
          output.ErrorMessage = "Login " + e;                
          return BadRequest(output);
       }            
    }

您应该能够 return "Content" 并指定状态代码和对象。
例如

return this.Content(HttpStatusCode.BadRequest, output);