WEB API跨域调用问题,请大家帮忙哦,作为一个老程序猿很羞愧

puxiaoming 2017-09-15 06:02:41
下面所有的服务器和客户端代码,在本地环境都测试过没问题的,客户端代码的项目在localhost:8000,服务器代码在localhost:9000,所以大家不要怀疑我低级的拼写和语法错误哦。
生产环境:服务器代码部署在IIS 8.5,WINDOWS 2012 SERVER上,则出现请求方法options 404问题。具体内容如下:
直接上代码,浏览器调用代码:
jQuery.support.cors = true;

$.ajax({
url: '<%=microservice%>API/USER/chkLogin',// 跳转到 action
data: {
txtUsername: $("#txtUsername").val(),
txtPassword: $("#txtPassword").val(),
},
type: 'Get',
cache: false,
async:false,
crossDomain: true,
// contentType: "application/json",
dataType: "json",
success: function (data) {
alert("ok");

},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
alert("异常!状态码" + XMLHttpRequest.status);
}

});
对于上述代码我做了几个测试:
如果把contentType: "application/json"注释,则不引起浏览器的OPTIONS方法预检,会直接请求 API,http://202.120.84.xxx/api/user/chklogin,代码也跟踪到,但是AJAX不执行SUCCESS函数,始终执行ERROR函数
如果不注释contentType: "application/json",则引起浏览器的options方法预检,此时,我在火狐中扑捉的信息如下:

我在想按照我的路由解析,肯定会是404呀,但是怎么解决这些问题呢?我的路由配置如下:
//跨域配置
//我们暂定三个“*”号,当然,在项目中使用的时候一般需要指定对哪个域名可以跨域、跨域的操作有哪些等等
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
// config.MapHttpAttributeRoutes();

//标记1为自定义路由,标记2为默认路由,需要把自定义路由排在前面。系统会先从自定义路由去匹配。
config.Routes.MapHttpRoute(
name: "TvbboyApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//默认路由就是符合restful规范的写法,建议不要去改动它
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
还请高手们指点一二呀,我已经查了两天,做了各种测试都没用!
...全文
285 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程有钱人了 2017-09-20
  • 打赏
  • 举报
回复
WEB AP有个奇怪的问题就是,如果是GET,请求的参数和服务器配置的不一样,会报404错误!仔细检查下参数吧
丰云 2017-09-18
  • 打赏
  • 举报
回复
另外,给你提一个建议,webapi的访问,设置为post比较好,通常返回html用get,返回数据,用post
丰云 2017-09-18
  • 打赏
  • 举报
回复
这肯定不是跨域的问题, 但具体是什么原因,凭现有的信息,暂时还无从判断
Im_Sorry 2017-09-18
  • 打赏
  • 举报
回复
建议使用httpcline 来进行调用 前台调用后台即可!!!
正怒月神 版主 2017-09-18
  • 打赏
  • 举报
回复
后台webapi代码呢? 下面这个说的是 ie8和9不支持cros的跨域问题,和解决方案。你可以看看是不是这个问题。 http://www.cnblogs.com/landeanfen/p/5177176.html
xiaojunjor 2017-09-18
  • 打赏
  • 举报
回复
不加contentType的话,error参数是什么? 如果你强加了contentType的话,非默认contentType就会触发预检,404看不出来,你得检查下你的url
  • 打赏
  • 举报
回复
404 not found,跟“跨域”没有关系。如果是跨域问题,那么服务器端会正常执行服务,输出结果,之不过浏览器端不回调 js 函数而已。根本找不会是 404 错误。
puxiaoming 2017-09-15
  • 打赏
  • 举报
回复
puxiaoming 2017-09-15
  • 打赏
  • 举报
回复
我又做了一些测试,发觉WEB服务器不仅不支持options请求,连put和delete都不支持,换句话说,WEB服务器只支持GET和POST

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧