因为第一次用webapi,并且还是前后台分离,所以设置到了跨域,在百度上找了很多解决办法,但是基本都存在缺陷,我这里分享一下我自己的经验

1.首先配置Web.config

这样配置发布到服务器就可以跨域了,当然还有很多方法,例如在NuGet下载cors的安装包,但是网站的这个教程在我这里并不适用,首先这么包需要.net4.5以上的版本的支持,但是我项目是4.5的版本,下载了这个包后IDocumentationProvider这个接口类多了两个

接口需要实现,不是的是不是我用VS2012版本低的缘故,就是自己实现了这两个接口代码不报错了,但是在运行代码的时候GlobalConfiguration这个类初始化失败,如果有人知道这个原因希望可以跟我留言解析一下这是怎么造成的,小弟在此万分感谢。

以下是我在跨域ajax请求的时候遇到坑,因为我是自动生成的webapi demo所有用ajax的get请求一直失败400错误 ,因为这两个Get方法不支持重载

上面这个虽然可有实现跨域功能,但是有一个小缺陷,就是做webapi身份验证的时候会出现请求不通过的情况,身份验证的时候通常的要在ajax的请求头里加上token身份验证票据,这个时候浏览器就会先发起一个options请求,而你的路由拦截这个请求

就会报错,所以下面有另外一种跨域方法可以解决该问题,也是我比较推荐的一种方法,如下图

首先第一步在NuGet里面安装Microsoft.ASP.NET Web API2.2 Cross-Origin Support这个包

安装了之后也许你的项目会报错,就是你的区域下面有个IDocumentationProvider接口类多了两个接口,这个时候你就手动实现一下,具体为什么引用了那两个包会多这两个接口原因尚且不明,手动实现如下

到了这一步你也许又会遇到坑,就是在你运行项目的时候你会发现下面这个错

是不是特别的头疼,各种坑爹啊有木有,有可能是我自己项目版本太低的缘故,你们要是没有这个错误最好,经过研究发现然后是我的一个System.Web.Http.WebHost.dll的版本太低,

我的是v4.0.0.0,要解决这个错误你就必须升级到System.Web.Http.WebHost.dll, v5.2.3.0以上的版本,反正这个版本好使,其他的版本我没试过,那么怎么升级这个东西呢,如下图

如果你的管理NuGet程序包没有BuGet官方程序源就到设置里面添加一下

是不是很麻烦,反正就这样经过千辛万苦搞定了,然后下面配置这个路由就行了

WebApi跨域问题解决的更多相关文章

  1. C#进阶系列——WebApi 跨域问题解决方案:CORS

    前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...

  2. WebApi 跨域问题解决方案:CORS

    注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看W ...

  3. C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)

    C#进阶系列——WebApi 跨域问题解决方案:CORS   阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...

  4. (转)C# WebApi 跨域问题解决方案:CORS

    原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2. ...

  5. django 前端请求跨域问题解决

    django 前端请求跨域问题解决 笔者之前在做django-restful-api开发的时候,在前端请求页面发送请求的时候直接出现301,域名重定向的问题,经过一番查阅资料,终于得到了非常完美的解决 ...

  6. Vue项目在开发环境跨域和生成环境部署跨域问题解决

    一.在dev环境下的跨域问题解决1.项目使用的是axios请求网络,将baseUrl修改为/api (这里是使用webpack提供的代理功能将/api代理成目标接口host) axios.defaul ...

  7. asp.net—WebApi跨域

    一.什么是跨域? 定义:是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 同源策略限制了以下行为: 1.Cookie.LocalStora ...

  8. 关于WebAPI跨域踩到的一点坑

    最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...

  9. WebAPI跨域处理

    原文来自:http://www.cnblogs.com/heifengwll/p/6243374.html WebApi2跨域问题   一.跨域问题产生的原因:同源策略(Same origin pol ...

随机推荐

  1. linux解压缩基本命令使用

    解压缩命令1.gzip 只能压缩文件,不可压缩目录,压缩后不保留原文件gzip a.txt会删除原文件 生成.gz后缀的文件 a.txt.gz2.gunzip解压.gz的文件gzip -d a.txt ...

  2. 字符串转换为字典的函数eval(字符串)

    首先把多行的字符串,变成一个字符串,用'''和'''扩起来: 然后把这个字符串,赋值给b 这个时候,b根本调不出来,也用不起来: 用eval(b),来格式化字符串变成字典: 然后b就变成了一个字典:

  3. 小程序中的setData的使用

    小程序中的setData setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步). 直接修改 this.data 而不调用 this.setDat ...

  4. Py修行路 python基础 (二十二)异常处理

    异常处理 一.错误和异常 程序中难免出现错误,而错误分为两种:语言异常和逻辑异常 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) for i in range ...

  5. nodejs中的util.inspect.js

    util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出.它至少接受一个参数 object,即要 ...

  6. C#使用protobuf

    C# protobuf的使用方法 通过.proto文件导出C#支持的.cs类文件 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.googl ...

  7. HTML_基础篇

    一.HTML的概述 什么是HTML? html:Hyper Test Markup Language 超文本标记语言(它不是编程语言!) 超文本:功能比普通的文本更加强大. 标记语言:使用一组标签对内 ...

  8. java Web 请求servlet绘制验证码简单例子

    主要用来了解java代码怎么绘制验证码图片,实际开发中不会这样用 protected void doGet(HttpServletRequest request, HttpServletRespons ...

  9. Python PyPI中国镜像

    from:http://blog.makto.me/post/2012-11-01/pypi-mirror from:http://www.pypi-mirrors.org/ from:http:// ...

  10. Ubuntu16.04 ARM平台移植libcurl curl-7.63.0

    libcurl是免费的轻量级的客户端网络库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,POP3, P ...