为什么在提供响应模型时必须指定HTTP状态代码?

时间:2016-02-12 12:38:28

标签: asp.net-mvc http asp.net-web-api

Request.CreateResponse(HttpStatusCode.OK)Request.CreateResponse(HttpStatusCode.OK, object)之间有什么区别?  ASP.NET Web API中的public HttpResponseMessage Put(int id, ModelObject object) { if (ModelState.IsValid && id == object.objectID) { db.Entry(object).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { return Request.CreateResponse(HttpStatusCode.NotFound); } return Request.CreateResponse(HttpStatusCode.OK); } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } }

如果对象对应的模型没有状态,是不是要将HttpStatusCode设置为true还是false?

由于以下情况,我提出了这个问题

            return JsonConvert.DeserializeObjectAsync<HttpResponseMessage>(response.Result.Content.ReadAsStringAsync().Result).Result;

**如果我检查httpresponsemessage.statuscode它显示httpresponsemessage在调用方法中为空,即使该行执行

任务响应= httpClient.PutAsJsonAsync(uri,modelObject);

ProgressBar pbFrame = new ProgressBar();
pbFrame.setVisible(true);       
Executors.newSingleThreadExecutor().execute(new Runnable() {
        @Override
        public void run() {
            // run background process

        }
    });

这是正确的

2 个答案:

答案 0 :(得分:0)

Request.CreateResponse(HttpStatusCode.OK)

仅使用httpStatusCode创建响应

Request.CreateResponse(HttpStatusCode.OK,"this test message")

使用与HTTPResponseMessage相关联的httpStatusCode创建响应

答案 1 :(得分:0)

根据你的措辞,你似乎混淆了元数据和有效载荷。

HTTP消息的状态行和标题描述了HTTP级别上发生的事情,因此客户端应用程序(“用户代理”)知道如何解释响应。

然后是有效载荷,服务器希望返回给客户端。当头文件描述有效载荷时,有效载荷对HTTP方面没有任何影响。

以下回复完全有效:

HTTP/1.1 404 Not Found
...

{
    "found" : "true"
}

以下情况如下:

HTTP/1.1 200 OK
...

{
    "status" : "error"
}

WebAPI不会查看您的有效负载以确定状态代码(因为两者之间没有任何关系),因此您可以单独指定响应代码及其有效负载。