c# - ajax GET 有效,POST 给出 400 错误

标签 c# javascript ajax

GetData(...) 方法正常,但 SetSimple(...) 方法抛出错误 400。

Javascript:

$.ajax(url,
        {
            type: action,
            timeout: 3000,
            data: { value: 123 },
            contentType: "application/json; charset=utf-8",
            //dataType: "json",
            success: function (data, textStatus, jqXHR) {
                displayInfo("success: "+data);
            },
            error: function(jqXHR, textStatus, errorThrown ) {
                displayInfo("error: "+errorThrown+" "+textStatus);
            }
        }
   );

C#:

[WebGet(RequestFormat = WebMessageFormat.Json)]
    string GetData(int value);

[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    string SetSimple(int value);

为了运行/测试它,我在浏览器中打开该服务,然后在另一个浏览器中打开带有 javascript 的测试页面。 (并且 dataType: "json"似乎没有帮助。) fiddler 响应显示“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志”,但我在事件日志中没有看到任何内容。有人知道我做错了吗?

最佳答案

您应该将 JavaScript 对象转换为字符串。

JSON.stringify(data)

然后以你的例子为例

$.ajax (url,
    {
        type: action,
        timeout: 3000,
        data: JSON.stringify({ value: 123 }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data, textStatus, jqXHR) {
            displayInfo("success: "+data);
        },
        error: function(jqXHR, textStatus, errorThrown ) {
            displayInfo("error: "+errorThrown+" "+textStatus);
        }
    }

);

关于c# - ajax GET 有效,POST 给出 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468834/

相关文章:

javascript - 获取存储在 Redis 中的所有内容并将其发送到模板

javascript - 无法使用正则表达式提取模式之间的字符串

javascript - ASP.NET/WebAPI : $. ajax 有 404 并且 $.getJSON 有未捕获的 RangeError:超出了最大调用堆栈大小

c# - 返回随机数类型问题

c# - C#中的CRC16计算?

jquery - MVC 3 和 ajax 调用 - 无法阻止它缓存

javascript - 使用 ajax 异步运行 javascript 函数

c# - 创建一个接受多种类型对象的 C# 方法?

javascript - React 应用程序中的路由 - 根据 URL 参数加载 jsx

javascript - 未捕获的类型错误 : Cannot read property 'appendChild' of null