2012-05-21 36 views
1

在我的Web API項目我已經從我的數據源返回數據的獲取方法:的WebAPI - 數據返回的XML時,我要求它作爲JSONP

[WebGet(UriTemplate = "")] 
    public IQueryable<Product> Get() 
    { 
     var products = _db.Products; 
     return products.AsQueryable(); 
    } 

當我在瀏覽器測試客戶端查看此,當我指定返回爲JSON時,它工作正常,並返回JSON。

在我的另一個客戶端上,我必須創建一個JSONP,因爲我的API託管在同一個域上(僅用於開發),但是從JSON請求返回的數據是XML,我怎樣才能使它返回JSON?下面是我的代碼發出請求:

$.ajax({ 
     crossDomain: true, 
     dataType: "jsonp", 
     url: "http://localhost:9000/api/products", 
     contentType: 'application/json; charset=utf-8', 
     type: "get", 
     success: function (data) { 

      console.log(data); 
     } 
    }); 
+0

看起來您仍在使用現在已過時的WCF Web API而不是較新的ASP.NET Web API。請參閱http://nuget.org/packages/AspNetWebApi –

+0

@達雷爾米勒 - 良好的捕獲。我甚至沒有注意到'WebGet'屬性。 – EBarr

+0

我已經把它換成了使用ASP.NET Web API並使用了'EBarr'的答案 – CallumVass

回答

2

this duplicate ....寬鬆偷

您的主要問題是,有沒有JSONP媒體格式通過default.To中的WebAPI註冊完成你想要的你需要三樣東西:

  1. 添加media formatter輸出JSONP
  2. 註冊媒體格式
  3. 確保客戶端請求jsonP。

你可以偷這個JSONP媒體formatter

然後,您需要註冊媒體格式化程序。你可以用下面的代碼片段編程方式做到這一點:

var config = GlobalConfiguration.Configuration; 
config.Formatters.Insert(0, new JsonpMediaTypeFormatter()); 

一般來說,你在global.asax爲此在Application_Start()

你的查詢看起來像是在請求JSONP很好。一旦完成上述工作,它應該可以工作。重要的部分是accept標題發送匹配您的閃亮新jsonp格式化程序正在偵聽的接受標頭。我認爲前兩種選擇是:application/javascript(如您要求)或text/javascript