Request.Result中的字符串在MVC 5中被截断

时间:2014-06-29 17:56:21

标签: ajax json asp.net-mvc-5

我有一个WebApi控制器和一个使用ajax来调用该视图的视图。

直到昨天一切都运行良好,但现在,我运行了项目,传输的数据被截断。 这是一个例子:

这是我的AjAx电话:

var data = JSON.stringify(aoData);
oSettings.jqXHR = $.ajax({
    "dataType": 'json',
    "type": "POST",
    "url": sSource,
    "data": data,
    "success": fnCallback,
    "contentType": 'application/json'
});

这是我的控制器:

public object GetAllProductsForDataTable(DataTableRequestItem[] pRequest)
{
    ...
}

发送前的数据是正确的。它已经完成,但是我的控制器在参数上收到一个NULL值,所以,我检查了收到的Request数据,发现json字符串被截断了。 通过从控制器调用 Request.Content.ReadAsStringAsync()。Result ,我得到的是这样的东西:

alue\":false},{\"name\":\"bSearchable_5\",\"value\":true}

实际的JSON值要长得多,但这只是它的开始,所以你可以看到它被截断了。

检查值的长度是1393,所以我认为它的长度可能有些问题,但无法弄明白。

更新

检查截断值的长度,我看到的是369 ... 这应该给出一些提示,因为对象的总长度减去读取值的总长度...是1024 ...

必须要从char 1024

中读取请求

更新2

我更改Controller Action以接收HttpRequestMessage而不是我的对象,并使用ReadAsStringAsync()更改Result.Result返回FULL字符串。 我猜测MVC正在做的参数绑定存在一些错误。

1 个答案:

答案 0 :(得分:0)

即使“客户端”部分根本不一样(没有Ajax,但有kt / Android调用),我也遇到了同样的问题,并且我确认此代码的结果给出了一个截断的字符串:

    [HttpPost]
    [BasicAuthentication]
    public HttpResponseMessage Send([FromBody]string json)
    {
        string str = Request.Content.ReadAsStringAsync().Result;

        return Request.CreateResponse(HttpStatusCode.OK);
    }

以下代码返回完整的字符串

[HttpPost]
[BasicAuthentication]
public HttpResponseMessage Send(HttpRequestMessage req)
{
    string str = req.Content.ReadAsStringAsync().Result;

    return Request.CreateResponse(HttpStatusCode.OK);
}