【问题标题】:POST request - Long JSON string - request size too large / Endpoint not foundPOST 请求 - 长 JSON 字符串 - 请求大小太大/找不到端点
【发布时间】:2015-05-09 15:20:14
【问题描述】:

这是我第一次在这里发帖,如果我违反了任何规则,请原谅。我已经广泛搜索了stackoverflow,但我无法找到我的问题的答案。

基本上,我正在尝试从 Windows 桌面应用程序将一个长 JSON 字符串作为 POST 请求的主体发送到 WCF 服务。 “长”是指当我反序列化字符串并将其导出为 XML 文件时,它占用了大约 200 kB。但是,我也没有得到任何简短的 JSON 字符串。

我尝试使用 RestSharp,但一直收到“找不到端点”。错误。当我尝试在 StackOverflow 上找到的方法或 MSDN 中的默认方法时,我收到一条错误消息:“错误 413:请求实体太大。”或者,如果我发送一个简短的 JSON 字符串,我会收到“错误 400:错误请求”。

这是我使用的方法。

Restsharp: RestSharp simple complete example

(这里我用了第一个答案,得到了 141 票) .NET: Simplest way to send POST with data and read response

https://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-27

我使用 VB.NET,但我也很乐意用 C# 来回答。但是,PHP 或 AJAX 的答案对我没有多大帮助。我已经有一位同事在 AJAX 中实现了它并且它可以工作,但是我们正在 VB.NET 中构建 Windows 桌面应用程序,而 AJAX 并不能将逐字逐句准确地转换为 VB.NET。

如果有任何帮助,我将不胜感激。提前致谢。

附:这是他发送给我的 HTML 文件中的 AJAX 代码 - 它有效。为了安全起见,我取出了 URL,并将长 JSON 字符串替换为一个简单的字符串。

<!DOCTYPE HTML>
<html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script type="text/javascript">

function btn_click(){
//alert('btn');
var updatedData='[{"firstname": "Billy", "lastname": "Bob", "occupation": "cowboy"}]';
$.ajax({
        type: "POST",
        url:"<suppressed>",
        data: JSON.stringify(updatedData),
        contentType: "application/json; charset=utf-8?",
        dataType: "json",
        processData: true,
        success: function (data, status, jqXHR) {
                  alert("success…" + data);
        },
        error: function (xhr) {
               $('#msgText').text(xhr.responseText);
                     //alert(xhr.responseText);
        }
});

}
</script>
</head>
<body>
<input type="button" text="Click" Value="Click" onclick="btn_click()">
<label id="msgText"></label>
</body>

【问题讨论】:

  • 欢迎来到 StackOverflow。关于在这里提问的一些注意事项: 1)尝试每个问题问一个问题。具有多个独立部分的问题得到的回答较少。 2) 展示你到目前为止所做的 - VB.NET 或 c#。因此,我建议放弃这个问题并提出 2 个类似于“如何使用 RestSharp 发布大型 JSON 字符串”和“如何使用 WebClient 发布大型 JSON 字符串”的问题。在两者中包含有效的 PHP 代码就可以了。
  • 如果你使用 chrome,我建议你看看 postman。它是免费的,允许您在不使用客户端的情况下发布到您的网络服务。通过这种方式,您可以找出是客户端问题还是服务器问题。如果您不使用 chrome,我建议您开始(如果可能)!
  • 我理解您为什么要删除 url,但请考虑:这也会删除端点,这使我们很难为您提供帮助。如果这是一项安全服务,您将需要实际保护它,仅仅隐藏它是不够的。如果它是面向公众的,那为什么要把它藏在这里呢?

标签: c# json vb.net post webrequest


【解决方案1】:

听起来 413 错误较早出现并隐藏到未找到端点/400 错误。 IIRC 默认最大请求实体为 65k,这就是您收到 413 错误的原因。这个最大大小可以尝试帮助阻止任何拒绝服务攻击。如果要更改此设置,最简单的方法是使用 WCF 服务配置编辑器(VS2010:工具 > WCF 服务配置编辑器)打开 WCF 服务配置文件。您可能需要创建一个具有较大 MaxReceivedMessageSize 的新绑定配置。 (同样不要让它太大或冒 DOS 攻击的风险)。您可能会发现还需要更改 MaxStringContentLength。然后将您的端点设置为使用这个新的绑定配置。 这应该可以处理 413 错误。

未找到的端点稍微复杂一些。因为这意味着您的客户端正在尝试调用未找到的服务器上的端点。由于您没有包含客户端尝试调用的端点或服务器提供的服务/端点的详细信息,因此我无能为力。但是,再次在服务配置编辑器中,您可以转到诊断并打开跟踪。这将在服务器上创建一个跟踪文件,可以帮助您发现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2012-08-03
    • 2019-03-17
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多