【问题标题】:Jquery Ajax is unable to get data from ASP.NET WEB APIJquery Ajax 无法从 ASP.NET WEB API 获取数据
【发布时间】:2015-12-24 20:39:03
【问题描述】:

我是 APS.NET MVC WEB API 编程的新手。

所以这是我的问题,我使用以下代码创建了一个 ASP.NET WEB API 项目

 public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<Employee> Get()
    {
        return new List<Employee>()
        {
            new Employee(){ EmpId=1,EmpName="xyz" },
            new Employee(){EmpId=2,EmpName="abc"}
        };
    }

    // GET api/values/5
    public Employee Get(int id)
    {
        return new Employee() { EmpId = id, EmpName = "xyz" };
    }

}

简单吧..!!

接下来我创建了一个 html 文件并编写了一个 ajax 方法来从 web api 获取数据

 $(function () {
            var obj = {};
            $.ajax({

                type: "GET",
                url: "http://localhost:2797/api/values/1",
                data: JSON.stringify(obj),
                dataType: "JSON",
                contentType: "application/json; charset=UTF-8",
                success: function (data) {
                    alert(data.EmpName);
                },
                failure: function (data) {
                    alert("Error Occured");
                }

            });

        });

现在这是我的 jquery 脚本能够与 webapi 联系的问题,因为当 html 页面刷新时断点会中断,并且它也会返回值,但由于某种未知原因,成功函数中的警报消息不会命中。我不知道为什么

请帮忙

提前谢谢..!!

【问题讨论】:

  • 你能不能把failure:改成error:(失败是参数名不正确)并添加alert(data)作为方法体?如果您有错误,它应该告诉您那是什么
  • @dotnetom 我已经用error 替换了failure:,但是它有点工作,但它返回了一个来自jquery lib的函数代码,
  • @dotnetom 我在同一个项目索引视图文件中使用了相同的 jquery 代码并且它工作正常但是我的 Html 文件超出了解决方案并且它抛出错误为什么..?
  • 你看过这个帖子吗:stackoverflow.com/questions/11242797/…
  • 嘿@DavidTansey 我看过帖子并修改了我的jquery代码,但它仍然在错误块中,我不知道为什么。!

标签: javascript jquery ajax asp.net-mvc-4 asp.net-web-api


【解决方案1】:

我终于找到了解决办法

首先转到工具->Nuget 包管理器-> 包管理器控制台

输入此命令Install-Package Microsoft.AspNet.WebApi.Cors -IncludePrerelease

然后在WebApiConfig.cs添加这行config.EnableCors();

现在用这个属性[EnableCors(origins:"*",headers:"*",methods:"*")]装饰你的apicontroller

但是在使用 post 方法使用 api 时,我们可能会遇到 cors 属性的一些问题

所以要避免它。我们可以全局声明 cors 属性

喜欢在WebApiConfig.cs写这段代码

var cors= new EnableCorsAttribute(origins:"*",headers:"*",methods:"*");
config.EnableCors(cors);

现在是 jquery 代码

$(document).read(function(){
    jquery.support.cors=true;
    $.ajax({
           type:"GET",
           url:"http://localhost:63300/api/values/1",
           crossDomain:true,
           contentType:"application/json; charset=utf-8",
           dataType:"json",
           success:function(data){
                alert(data);
           },
            error:function(data){
                alert('Error Occured..!');
            }
          });
});

【讨论】:

  • 如果您在一个实时公共网站中使用它,您应该考虑更改您的 CORS 声明的 origins 部分以仅列出您所有访问的域,否则任何人都可以访问您的 API在他们的网站上。
  • 是的@PeterBailey 我知道,但我想创建这个 api 来向移动设备提供数据,这就是为什么我允许它访问所有网站但我将提供身份验证
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2018-04-28
相关资源
最近更新 更多