我使用C#和HttpResponseMessage编写服务器验证。我需要使用某些消息将响应发送回客户端,发送的数据无效。我应该从此列表中选择哪个响应代码?
https://msdn.microsoft.com/en-us/library/system.net.httpstatuscode(v=vs.110).aspx
我是否可以自定义消息,以便知道哪个字段包含无效数据?
注意:MVC 4,Visual Studio 2010。
这是我的帖子功能:
// POST api/Default1
[HttpPost]
public HttpResponseMessage PostUserProfile(HttpRequestMessage req)
{
UserProfile up = new UserProfile();
string jsonContent = req.Content.ReadAsStringAsync().Result;
if (ModelState.IsValid)
{
up = JsonConvert.DeserializeObject<UserProfile>(jsonContent);
if (up.userName.Length <= 50 &&
up.email.Length <= 60)
{
db.UserProfiles.Add(up);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, up);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = up.UserId }));
return response;
}
else
{
// finish the server validation
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.InternalServerError, up);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = up.UserId }));
return response;
}
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
答案 0 :(得分:0)
有些人建议BadRequest是Http消息400:
等效于HTTP状态400. BadRequest表示服务器无法理解该请求。如果没有其他错误适用,或者确切错误未知或没有自己的错误代码,则会发送BadRequest。
在这种情况下,我认为它不合适,因为浏览器不会将其视为错误,就像我将OK消息发送回客户端一样。
我认为NotFound更合适:
等效于HTTP状态404. NotFound表示服务器上不存在所请求的资源。
浏览器将其视为错误,因此发送到jQuery AJAX对象中的错误处理程序。所以你可以正确处理它,即更新html中的一些消息框,让用户知道服务器/数据库根本不包含表中的那个资源或行。