2015-09-27 76 views
4

我是APS.NET MVC WEB API編程的新手。Jquery Ajax無法從ASP.NET 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方法從網頁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頁面得到刷新時,它也會返回值,但由於某些未知原因,「成功」函數中的警報消息將不會被觸發。我不知道爲什麼

請幫忙

在此先感謝.. !!

+1

你可以改變'失敗:'到'錯誤:'(失敗是不正確的參數名稱)並添加'alert(data)'作爲方法體?如果你有一個錯誤,它應該告訴你什麼是 – dotnetom

+0

@dotnetom我用'error'替換了'failure:',但它有點作用,但它返回了一個函數代碼形式jquery lib, –

+0

@dotnetom我已經使用了在相同的項目索引視圖文件相同的jquery代碼,它的工作正常,但我的Html文件超出瞭解決方案,它拋出錯誤,爲什麼..? –

回答

2

我終於找到了解決辦法

第一轉到工具 - > NuGet包管理器 - >程序包管理器控制檯

類型在此命令Install-Package Microsoft.AspNet.WebApi.Cors -IncludePrerelease

然後在WebApiConfig.cs加入這一行config.EnableCors();

現在裝飾您使用此屬性的apicontroller [EnableCors(origins:"*",headers:"*",methods:"*")]

但是,在使用post方法消費api時,我們可能會遇到一些問題,因此可以避免使用屬性

。我們可以聲明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..!'); 
      } 
      }); 
}); 
+0

如果您在現場公共網站中使用此功能,則應考慮更改CORS聲明的原始部分,以僅列出您全部訪問的域,否則任何人都可以在其網站上訪問您的API。 –

+1

是@PeterBailey我知道,但我想創建這個api向移動設備提供數據,這就是爲什麼我允許它所有的網站,但我會提供身份驗證 –