ASP.NET Web API 支持 CORS

简介:

Cross-Origin Resource Sharing (CORS) 是W3C草案拟定的浏览器与服务端如何进行跨域请求的方式,其原理是用自定义HTTP头来让浏览器和SERVER决定request、response的成功或失败。目前几乎所有浏览器都已经支持了(Internet Explorer 8+, Firefox 3.5+, Safari 4+, and Chrome)。

使用一个GET或POST发送一个未自定义头的请求时,会额外添加一个叫做Origin的头,其包含了请求页面的协议、域名和端口,后台可以根据这些信息很轻松的判断出是否要给出正确的response,就像下面这样

Origin: http://www.cnblogs.com
如果server允许这个请求,则会得到一个HEADER包含Access-Control-Allow-Origin的响应,而Access-Control-Allow-Origin的值则为刚刚Origin的值或*(公开资源),比如:

Access-Control-Allow-Origin: http://www.cnblogs.com
如果没有这个HEADER或者HEADER不匹配,浏览器则会拒绝这个请求,匹配上了就会成功,但不管是否成功,这个请求都不会带有任何cookie信息。

之前提到的所有浏览器都支持这种简单的请求方式。Firefox 3.5+, Safari 4+和 Chrome使用XMLHttpRequest对象来实现,这跟普通的请求是一样的,但当浏览器发现请求的是跨域的资源时,CORS模式会自动被触发,而不需要额外的代码来处理.

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

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

目录
相关文章
|
24天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
36 4
|
26天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
86 3
|
3天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
11 1
|
10天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
22 2
|
20天前
|
监控 负载均衡 API
Web、RESTful API 在微服务中有哪些作用?
在微服务架构中,Web 和 RESTful API 扮演着至关重要的角色。它们帮助实现服务之间的通信、数据交换和系统的可扩展性。
41 2
|
26天前
|
人工智能 搜索推荐 API
用于企业AI搜索的Bocha Web Search API,给LLM提供联网搜索能力和长文本上下文
博查Web Search API是由博查提供的企业级互联网网页搜索API接口,允许开发者通过编程访问博查搜索引擎的搜索结果和相关信息,实现在应用程序或网站中集成搜索功能。该API支持近亿级网页内容搜索,适用于各类AI应用、RAG应用和AI Agent智能体的开发,解决数据安全、价格高昂和内容合规等问题。通过注册博查开发者账户、获取API KEY并调用API,开发者可以轻松集成搜索功能。
|
22天前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
114 0
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
53 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0