web api http post传递对象504接收失败

时间:2014-02-24 09:35:08

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

在我的本地计算机上调试。我有fidder模拟对http post web api http://localhost:15147/api/Pacel/CreatePacel/

的请求

如果我将fidder“Composer” - “请求标题”设置为:

User-Agent: Fiddler
Accepted: application/json
Content-Type: application/json
Content-Length: 0
Host: localhost:15147

它确实有效,我确认它可以进入我的断点“if (pacel == null) // SET BREAKPOINT HERE

但如果我设置Content-Length: 1000并在fidder“Composer”中添加“Request Body”:

{
   "id": 3
   "province":"US",
   "city":"US"
}

它不会进入断点“if (pacel == null) // SET BREAKPOINT HERE

任何人都可以知道这是什么问题吗?

PacelContrller中的

动作方法如下:

// POST api/values
        [HttpPost]
        [ActionName("CreatePacel")]
        public HttpResponseMessage CreatePacel([FromBody]Pacel pacel)
        {
            try
            {
                if (pacel == null)  // SET BREAKPOINT HERE
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "can not read object from body.");
                }
                else
                {
                    int effectedRows = 0;
                    effectedRows = pr.Add(pacel);
                    if (effectedRows == 0)
                    {
                        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "can not save to the db.");
                    }
                    else
                    {
                        return Request.CreateResponse(HttpStatusCode.Created, "created items in db success.");
                    }

                }
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }


        }

Pacel模型如下:

public partial class Pacel
    {
        public long pacelId { get; set; }
        public Nullable<System.DateTime> arrivedDate { get; set; }
        public Nullable<System.DateTime> signDate { get; set; }
        public string signname { get; set; }
        public Nullable<long> customerId { get; set; }
        public string province { get; set; }
        public string city { get; set; }
        public string district { get; set; }
        public string campname { get; set; }
        public string bldNumber { get; set; }
        public string unitNumber { get; set; }
        public string roomNumber { get; set; }
        public string type { get; set; }
    }

@Rafa回答后编辑

with body {“pacelId”:3“省”:“US”,“city”:“US”}并留下内容长度= 0;它可以很好地工作(意味着它可以进入断点)。但是对象不能在服务器端传递。在断点处,它显示pacel为空

2 个答案:

答案 0 :(得分:0)

我认为您发送的JSON不适合该模型,您可以尝试:

{    &#34; pacelId&#34;:3    &#34;省&#34;:&#34; US&#34 ;,    &#34;城市&#34;:&#34;美国&#34; }

我首先会留下内容长度= 0或者说实际内容长度。

答案 1 :(得分:0)

您的请求正文格式不正确,您需要在第一个属性(id)之后添加逗号。我也会将“id”更改为pacelId以匹配您的起搏对象:

{
   "pacelId": 3,
   "province":"US",
   "city":"US"
}

注意:您可以让Fiddler自动设置Content-Length:

作曲家&gt;选项选项卡,然后选中“修复内容长度标题”选项。