2014-01-12 50 views
0

我試圖讓不同域中從API數據獲得的數據,但我得到這個錯誤:如何從一個跨域API

XMLHttpRequest cannot load https://www.bitstamp.net/api/ticker/ . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost' is therefore not allowed access.

我試圖在頭部添加這一點,但它仍然不能正常工作:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    Access-Control-Allow-Origin: https://www.bitstamp.net 
</head> 
<body> 
<script src="Index.js"></script> 
</body> 
</html> 

這是我的JavaScript:

var ticker = "https://www.bitstamp.net/api/ticker/"; 
$.ajax({ 
    dataType: "json", 
    url: ticker, 
    type: "POST", 
    crossDomain: true, 
    scriptCharset: "utf-8" 
}); 

我不能使用JSONP,因爲網站不支持這個。 如何在不同域上使用JSON接收來自API的數據? 我想用JavaScript或C#來做到這一點。

+2

這不是真正的* header *,它是您要聯繫的服務器設置的請求標頭,所以如果它不是您的服務器,那麼您就無能爲力。 – adeneo

回答

2

添加類你的項目,並與它標誌着你的控制器

public class AllowCrossSiteAttribute : ActionFilterAttribute { 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     if (actionExecutedContext.Response != null) 
     actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
      base.OnActionExecuted(actionExecutedContext); 
     } 
    } 
} 

然後在控制器添加到控制器的方法的選擇,因爲第一次調用將選項來得到,如果十字allowd

[System.Web.Http.AllowAnonymous] 
public HttpResponseMessage Options() 
{ 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

(請不要在這裏允許所有域名,但你可以用你的域名列表替換「*」)

或者使用web配置(但它將適用於所有控制器)

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
<add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /> 
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

選件的asp.net web表單可以

Response.AppendHeader("Access-Control-Allow-Origin", "*"); 
+0

這隻適用於MVC? – Freddy

+0

@Freddy我有更新的網絡形式 –

+0

但我認爲,網絡配置選項可能是兩種解決方案,所以你應該嘗試,但我不知道。 –

0

有一個安全的影響,如果你讓*與CORS。來自任何其他網站的腳本將能夠在登錄用戶瀏覽器中從您的api獲取數據。 從不使用*與CORS,將允許的主機列入白名單。