Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从web api 2获取值时出现Json分析错误_C#_.net_Json_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

C# 从web api 2获取值时出现Json分析错误

C# 从web api 2获取值时出现Json分析错误,c#,.net,json,asp.net-web-api,asp.net-web-api2,C#,.net,Json,Asp.net Web Api,Asp.net Web Api2,我开发了一个简单的WebAPI 2应用程序,其中包括以下get方法: public HttpResponseMessage Get(int id) { var x = db.TESTS.ToList(); var formatter = new JsonMediaTypeFormatter(); return Request.CreateResponse(HttpStatusCode.OK, x, formatter); }

我开发了一个简单的WebAPI 2应用程序,其中包括以下get方法:

    public HttpResponseMessage Get(int id)
    {
        var x = db.TESTS.ToList();
        var formatter = new JsonMediaTypeFormatter();
        return Request.CreateResponse(HttpStatusCode.OK, x, formatter);
    }
我查过了。它正在返回Json值。我也在Fiddler登记了

但当我想在一个简单的html文件中检索它时,我得到了一个解析错误。我的Web服务在localhost中发布

Web服务url:正在返回

[{“ID”:2.0,“TEXT”:“test2”},{“ID”:1.0,“TEXT”:“test”}]

这是密码

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Get Json value from WebAPI url</title>
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>

    <script type="text/javascript">
        jQuery(document).ready(function ($) {
            jQuery.ajax({
                type: "GET",
                url: "http://192.168.5.154/mobileapi/api/values/2?callback=?",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, status, jqXHR) {
                    alert("data is available");
                },

                error: function (jqXHR, status) {
                    alert(status);
                }
            });

        });

    </script>

</body>
</html>

从WebAPI url获取Json值
jQuery(文档).ready(函数($){
jQuery.ajax({
键入:“获取”,
url:“http://192.168.5.154/mobileapi/api/values/2?callback=?",
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据、状态、jqXHR){
警报(“数据可用”);
},
错误:函数(jqXHR,状态){
警报(状态);
}
});
});

更新控制器代码:

  using System.Web.Script.Serialization;



  [HttpGet]
        public JsonResult  Get(int id)
        {
            var ListOfMyObject = db.TESTS.ToList(); 
            JavaScriptSerializer jss = new JavaScriptSerializer();

            string output = jss.Serialize(ListOfMyObject);
            return Json(output , JsonRequestBehavior.AllowGet);  
        }

从这里开始读

Alhamdulillah,问题解决了

需要在web服务上启用CORS

步骤。 1.安装Microsoft ASP.NET Web API 2.2。。。5.2.3来自Nuget软件包 2.添加
config.EnableCors(新的EnableCorsAttribute(“*”、“*”、“*”)

我的html Json代码是:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Get Json value from WebAPI url</title>
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>


    <script type="text/javascript">
            var getJSON = function (url) {
                return new Promise(function (resolve, reject) {
                    var xhr = new XMLHttpRequest();
                    xhr.open('get', url, true);
                    xhr.responseType = 'json';
                    xhr.onload = function () {
                        var status = xhr.status;
                        if (status == 200) {
                            resolve(xhr.response);
                        } else {
                            reject(status);
                        }
                    };
                    xhr.send();
                });
            };

            getJSON('http://192.168.5.154/mobileapi/api/values/2').then(function (data) {
                //alert('Your Json result is:  ' + data.result); //you can comment this, i used it to debug
                //alert(data.TEXT);

                result.innerText ="Oracle Data\nId: " + data.ID + "\nText: "+  data.TEXT; //display the result in an HTML element
            }, function (status) { //error detection....
                alert('Something went wrong.');
            });

    </script>

    <div id="result" style="color:red"></div>

</body>
</html>

这显示错误:错误1“System.Web.Http.ApiController.Json(System.Net.Http.Formatting.JsonMediaTypeFormatter,Newtonsoft.Json.JsonSerializerSettings)”的最佳重载方法匹配的变量x是否存在无效参数?好的,请尝试代码,我现在返回的是x而不是格式化程序。好的,现在显示此错误:错误1“System.Web.Http.ApiController.Json(string,Newtonsoft.Json.JsonSerializerSettings)”的最佳重载方法匹配'有一些无效参数其他错误:错误2参数2:无法从'System.Web.Mvc.JsonRequestBehavior'转换为'Newtonsoft.Json.JsonSerializerSettings',您在
jQuery
代码中的
url
似乎是错误的。还可以使用
method
而不是
type
。这里有什么问题吗?请确保它是相同的url在fiddler中看到时返回。是的,它是相同的url。因为它是一个外部url,所以我添加了?callback=?
   public IHttpActionResult Get(int id)
        {
            var product = db.TESTS.FirstOrDefault((p) => p.ID == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);         
        }