服务器验证 - 响应消息?

时间:2017-05-23 10:47:20

标签: c# asp.net ajax model-view-controller httpresponse

我使用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);
        }
    }

1 个答案:

答案 0 :(得分:0)

有些人建议BadRequest是Http消息400:

  

等效于HTTP状态400. BadRequest表示服务器无法理解该请求。如果没有其他错误适用,或者确切错误未知或没有自己的错误代码,则会发送BadRequest。

在这种情况下,我认为它不合适,因为浏览器不会将其视为错误,就像我将OK消息发送回客户端一样。

我认为NotFound更合适:

  

等效于HTTP状态404. NotFound表示服务器上不存在所请求的资源。

浏览器将其视为错误,因此发送到jQuery AJAX对象中的错误处理程序。所以你可以正确处理它,即更新html中的一些消息框,让用户知道服务器/数据库根本不包含表中的那个资源或行。