如何使用 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);
我的目标是创建一个传递对象的错误请求响应。这样做的原因是为了与我的 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);