ASP.NET JavaScript-JSON原语无效

ASP.NET JavaScript-JSON原语无效,javascript,c#,asp.net,json,Javascript,C#,Asp.net,Json,我正在尝试将“contentTools”与ASP.NETC#网站结合使用。我正在尝试将修改后的json发送到服务器端以存储在数据库中 我已经通过外部web验证了JSON,但下面是我的代码。出于测试目的,我尝试使用从ASP.NET方法返回的字符串调用警报 window.onload = function () { //ShowCurrentTime(); var FIXTURE_TOOLS, IMAGE_FIXTURE_TOOLS, LINK_FIXTURE_TOO

我正在尝试将“contentTools”与ASP.NETC#网站结合使用。我正在尝试将修改后的json发送到服务器端以存储在数据库中

我已经通过外部web验证了JSON,但下面是我的代码。出于测试目的,我尝试使用从ASP.NET方法返回的字符串调用警报

window.onload = function () {
        //ShowCurrentTime();
        var FIXTURE_TOOLS, IMAGE_FIXTURE_TOOLS, LINK_FIXTURE_TOOLS, editor;
        ContentTools.IMAGE_UPLOADER = ImageUploader.createImageUploader;
        ContentTools.StylePalette.add([new ContentTools.Style('By-line', 'article__by-line', ['p']), new ContentTools.Style('Caption', 'article__caption', ['p']), new ContentTools.Style('Example', 'example', ['pre']), new ContentTools.Style('Example + Good', 'example--good', ['pre']), new ContentTools.Style('Example + Bad', 'example--bad', ['pre'])]);
        editor = ContentTools.EditorApp.get();
        editor.init('[data-editable], [data-fixture]', 'data-name');
        editor.addEventListener('saved', function (ev) {
            var name, payload, regions, xhr;

            // Check that something changed
            regions = ev.detail().regions;
            if (Object.keys(regions).length == 0) {
                return;
            }

            // Set the editor as busy while we save our changes
            this.busy(true);

            // Collect the contents of each region into a FormData instance
            payload = new FormData();
            payload.append('regions', JSON.stringify(regions));

            xhr = new XMLHttpRequest();
            xhr.open('POST', 'Default.aspx/getJSONHTMLResponse');
            xhr.setRequestHeader("Content-Type", "application/json");
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    alert(xhr.responseText);
                }
            };            
            xhr.send(payload);


        });

以下是我在chrome的开发者工具中看到的请求负载:

------WebKitFormBoundaryilrxnMxm7ANdiYMp
Content-Disposition: form-data; name="regions"

{"para-1":"<p>\n testestest\n</p>","para-2":"<p>\n testestestestest.\n</p>"}
------WebKitFormBoundaryilrxnMxm7ANdiYMp--

因为您正在接受一个字符串作为api端点的参数,所以将其作为字符串发送。无需追加到FormData中。它将把你的有效载荷作为一个对象发送

xhr.send(JSON.stringify(regions));

所以我想汇报一下我是如何解决这个问题的

显然,我发现了一个困难的方法,表单数据很难读取。我所做的是:

  • 创建适当的Web服务控制器以接受JToken响应
  • 解析键、值对中的响应
  • 根据需要将其添加到会话对象和数据库中

  • 谢谢

    嗨,我需要更多的信息来帮助你。为什么不将ASP.Net Web Api与Angular或React或Vuejs一起使用?您声明了变量“regions”,它的内容是什么?您是否可以在Github中显示代码的示例?抱歉,无法提供更多帮助。regions具有html元素及其内容的id。这就是我正在做的:谢谢!如何发送和接受对象?如果我将方法更改为:public static object getJSONHTMLResponse(object name){return“Success”;}1,它仍然不起作用。创建一个名为:
    [Serializable]公共类区域{public string paraNo{get;set;}公共字符串paraText{get;set;}}
    2的类。将方法更改为:
    publicstaticstringmethodname(Region区域){return“success”}
    3.根据区域类属性创建从ajax发送的对象。
    {"Message":"Invalid JSON primitive: ------WebKitFormBoundaryilrxnMxm7ANdiYMp.","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
    
    xhr.send(JSON.stringify(regions));