ASP.NET Web API 支持 CORS
Cross-Origin Resource Sharing (CORS) 是W3C草案擬定的瀏覽器與服務(wù)端如何進行跨域請求的方式,其原理是用自定義HTTP頭來讓瀏覽器和SERVER決定request、response的成功或失敗。目前幾乎所有瀏覽器都已經(jīng)支持了(Internet Explorer 8+, Firefox 3.5+, Safari 4+, and Chrome)。
使用一個GET或POST發(fā)送一個未自定義頭的請求時,會額外添加一個叫做Origin的頭,其包含了請求頁面的協(xié)議、域名和端口,后臺可以根據(jù)這些信息很輕松的判斷出是否要給出正確的response,就像下面這樣
Origin: http://www.rzrgm.cn
如果server允許這個請求,則會得到一個HEADER包含Access-Control-Allow-Origin的響應(yīng),而Access-Control-Allow-Origin的值則為剛剛Origin的值或*(公開資源),比如:
Access-Control-Allow-Origin: http://www.rzrgm.cn
如果沒有這個HEADER或者HEADER不匹配,瀏覽器則會拒絕這個請求,匹配上了就會成功,但不管是否成功,這個請求都不會帶有任何cookie信息。
之前提到的所有瀏覽器都支持這種簡單的請求方式。Firefox 3.5+, Safari 4+和 Chrome使用XMLHttpRequest對象來實現(xiàn),這跟普通的請求是一樣的,但當(dāng)瀏覽器發(fā)現(xiàn)請求的是跨域的資源時,CORS模式會自動被觸發(fā),而不需要額外的代碼來處理.
ASP.NET Web API 支持 CORS 支持的代碼參見 http://code.msdn.microsoft.com/Implementing-CORS-support-418970ee,也可以通過Nuget 獲取WebAPIContrib
PM> Install-Package WebAPIContrib
然后給你的Web API的Action 打上標簽[EnableCors],例如下面的代碼
// NOTE: Maybe it is not a good idea to expose the 'model' in the service/API.
// Consider using use-case-based DTOs (http://davybrion.com/blog/2012/02/dtos-should-transfer-data-not-entities).
public class ContactsController : ApiController
{
private readonly IContactRepository repository;
public ContactsController(IContactRepository repository)
{
this.repository = repository;
}
[EnableCors]
public IQueryable<Contact> Get()
{
return repository.GetAll().AsQueryable();
}
[EnableCors]
public HttpResponseMessage Get(int id, HttpRequestMessage request)
{
var contact = repository.Get(id);
if (contact == null)
{
var response = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent("Contact not found.")
};
throw new HttpResponseException(response);
}
var contactResponse = request.CreateResponse(HttpStatusCode.OK, contact);
contactResponse.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300));
return contactResponse;
}
參考:
http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
Using CORS to access ASP.NET services across domains
Cross-Origin Resource Sharing (CORS) and WCF
在asp.net web api中動態(tài)修改action的名字
ASP.NET Web API: CORS支持和基于屬性的路由改進
Using Cross Origin Resource Sharing (CORS) in ASP.NET Web API
代碼下載:
歡迎大家掃描下面二維碼成為我的客戶,扶你上云

浙公網(wǎng)安備 33010602011771號