WebAPI跨域处理
原文来自:http://www.cnblogs.com/heifengwll/p/6243374.html
WebApi2跨域问题
一、跨域问题产生的原因:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能。
2、在文件WebApiConfig.cs中配置跨域设置

3、因为前端提交ajax请求,用的类型是application/json。发送post请求前会先发送一个预请求,就是option请求。
要在Web.config中配置下处理option请求,让后端能够正确的响应option请求,前端才会继续发送post请求。
这两个处理程序会影响option请求的正确处理。
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
1、默认的配置:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
这样设置可以实现简单请求的跨域,
但是非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。options请求。
触发options请求的条件:
1、非GET 、POST请求
2、POST请求的content-type不是常规的三个:application/x- www-form-urlencoded(使用 HTTP 的 POST 方法提交的表单)、multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)、text/plain(纯文本)
3、POST请求的payload为text/html
4、设置自定义头部
但是不能实现非简单请求的跨域。
还需要在web.config中<system.webServer>下添加
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
注意 :
var cors = new EnableCorsAttribute("10.116.56.69:90", "*", "*");
是不行的 ,要写http://10.116.56.69:90
注意:如果写http://localhost:90 ,那浏览器访问的时候也要访问 http://localhost:90,如果访问http://10.116.56.69:90,也是不能跨域的。
原文来自:http://www.cnblogs.com/heifengwll/p/6243374.html
本人遇到的坑:
坑一: 托管模式 设置为了 经典模式 此时是无法生效工作的 调成集成模式下就好了 (应该是经典模式下 web.config有差别的原因)
坑二:在Global的Application_Start中必须先注册 API路由 再注册 MVC路由 顺序不能颠倒 ,否则不生效
protected void Application_Start()
        {
// 必须先注册WebAPI路由 再注册MVC路由 否则 WebAPICors 不生效
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }
WebAPI跨域处理的更多相关文章
- C#进阶系列——WebApi 跨域问题解决方案:CORS
		
前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...
 - WebApi 跨域问题解决方案:CORS
		
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看W ...
 - C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)
		
C#进阶系列——WebApi 跨域问题解决方案:CORS 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...
 - asp.net—WebApi跨域
		
一.什么是跨域? 定义:是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 同源策略限制了以下行为: 1.Cookie.LocalStora ...
 - 关于WebAPI跨域踩到的一点坑
		
最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...
 - SNF快速开发平台MVC-EasyUI3.9之-WebApi跨域处理方案
		
在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案.由于时间有限,本文不会深入. 笔者遇到的问题是Js调用WebAPI中的数据进行跨域的场景.涉及若干跨域方案:目前采用we ...
 - (转)C# WebApi 跨域问题解决方案:CORS
		
原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2. ...
 - sql的行转列(PIVOT)与列转行(UNPIVOT)  webapi 跨域问题  Dapper 链式查询 扩展  T4 代码生成 Demo (抽奖程序)
		
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
 - 连表查询都用Left Join吧  以Windows服务方式运行.NET Core程序  HTTP和HTTPS的区别  ASP.NET SignalR介绍  asp.net—WebApi跨域  asp.net—自定义轻量级ORM  C#之23中设计模式
		
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
 
随机推荐
- mysql学习笔记五 —— MHA
			
MySQL_MHA ABB(主从复制)-->MHA(实现mysql高可用.读写分离.脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepali ...
 - ADODataSet与ADOQuery的区别
			
ADODataSet组件 此组件功能是非常强大的,通过ADODataset,可以直接与一个表进行联接,也可以执行SQL语句,还可以执行存储过程,可以说集ADOTable. ADOQuery. A ...
 - 学习笔记之csrf
			
CBV 添加 csrf 第一种: 指定方法方面添加 装饰器 @memethod_decorator(xxx) 第二种 全部添加: 注意 在类名前: @method_decorator(xxx,name ...
 - codeforces439B
			
Devu, the Dumb Guy CodeForces - 439B Devu is a dumb guy, his learning curve is very slow. You are su ...
 - [资源]--完美解决--用VS中的Git做代码管理器,与他人共享代码
			
1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...
 - Git初次使用总结,安装到上传代码,多平台[码云|github]
			
安装步骤 1.选择安装路径 2.选择创建图标,选择安装Git Bash和Git GUI 3.选择创建开始菜单 4.选择:use git and optional unix tools from the ...
 - MySQL 5.7双主同步部分表
			
参考:http://www.jb51.net/article/122892.htm?pc 前言: 我们要配置双主同步的mysql服务器. 暂时叫做,mysql1和mysql2吧. 一 mysql的配 ...
 - Java8的flatMap如何处理有异常的函数
			
Java8的flatMap函数,作用是:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional. 见到的映射函数往往都只有一句话,连大括号都不需要加的,如下: ...
 - .htaccess 配置
			
常规wordpress配置 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ ...
 - 删除linux下的指定文件
			
要求:删除linux下2天前的指定文件 find 文件问题:在 tmp 目录下有大量包含 picture_* 的临时文件,每天晚上 2:00 对一天前的文件进行清理.之前在 crontab 下跑如下脚 ...