关于.NET WebAPI 常见的跨域问题 解决清单
还没有学习WebAPI的读者,请移步http://www.cnblogs.com/landeanfen/p/5337072.html
前言:
以下问题虽然解决方法虽简单,但是相信浪费了很多人很多的时间。
如百度中“405错误怎么办”、“接口跨域问题怎么解决”、“post接收不到参数”等…
其实这些问题都是本地调试时的问题,当挂到服务器之后屁事没有。其实本地访问接口和挂到服务器之后是不一样的。
下面根据本人经验,顺序说明了内网调试接口时问题产生的原因和解决方法。希望对你有帮助。
清单:
1.在vs2013以上版本新建web项目时,会在项目类型下放出现(winfrom、api、mvc)三个选项
2.如果你要追求完美,建webAPI只勾API一个选项,那么你想调试post的时候,就没有页面给你写ajax调试。
3.这时,你想到在原项目新建一个MVC控制器用来调试,它就会把所有因为你之前没勾MVC选项的所有相关文件及类加载进来,而后可能会因为微软部分vs版本的BUG,导致你新建用来调试post的mvc页面无法打开。
4.这时,你想另外新建一个网页项目单独来调post接口,会出现405跨域问题,无法调试。
5.这时,你想到通过第三方调试工具调试,则会出现能进入post方法,但参数为空的问题(这是因为第三方工具和微软的webAPI不兼容,你换成不规范的参数写法如,string a,string b 就能获取到)
6.所以. 最好的开发调试webAPI的方式应是,新建项目的时候,新建WebAPI(保证mvc和api都勾上),然后在这项目里 你可以让“api控制器”和“页面的控制器”同时存在。并且开启调试,随便你怎么调都不会有问题。
7.为了追求完美,当你要发布的时候,再新建一个纯webAPI 直接把调好的接口控制器拷贝过去 发布即可。
例:
[HttpPost] [Route("Pr/Kong/PostTest2")] public string PostTest2(dynamic obj) { return "调用成功,参数name:" + obj.name + "\n参数age:" + obj.age; }