关于使用webapi,调用出现,跨域的问题,有高人帮我看看如何解决?

ruan1978 2018-08-09 02:12:57
有朋友写了一个操作硬件的接口,用来控制某个硬件设备的开关。他访问的接口是用php给我封装的,也就是用php写了webapi,可以供我调用。他提供的参数方式是这样的:
调用的api接口完整地址:http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen
参数说明:
请求参数:
{
"operatorId":"PZYNjFSErHeqpiVXP69TfxcCal4a",//由我提供,暂时为固定值
"operationId":"27c1913b4829438eba726b7d072446b4",//请求开门命令返回的执行ID号
"lockId":"ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e",//锁编码
"token":"PZYNjFSErHeqpiVXP69TfxcCal4a"//由我提供,暂时为固定值
}
成功调用后的返回参数
{
"result": "success.",//成功
"reason": "fine.",//成功
"timestamp": "2018-6-27 14:33",//操作时间,UTC时间
"oprationId": "27c1913b4829438eba726b7d072446b4 "//本次操作的唯一编码
}
我用vs2012 c#,用mvc方式做了一个简单页面,来调用他的接口,具体页面代码如下:
@{
ViewBag.Title = "测试接口";
}
<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>测试硬件接口</title>
<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<link href="~/CSS/style.css" rel="stylesheet" />
<script type="text/ecmascript">
$(document).ready(function() {
$("#btnLockOpen").click(function () {
$.ajax({
type:"post",
url: "http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen",
contentType:"application/json",
data: { operatorId: "PZYNjFSErHeqpiVXP69TfxcCal4a", operationId: "27c1913b4829438eba726b7d072446b4", lockId: "ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e", token: "PZYNjFSErHeqpiVXP69TfxcCal4a" },
success:function(data){
if(data==true){
$("printresult").html("成功!");
}else{
$("printresult").html("失败!");
}
}
});
})

</script>
</head>
<body>
<p>
<input type="button" id="btnLockOpen" value="开" />
</p>
<div id="printresult">

</div>
</body>
</html>
我运行后,在 ie中,单击页面上的按钮没有任何效果,然后单击按钮看右键,“查看元素”,出现如下提示:
HTTP403: 禁止访问 - 服务器已了解请求,但将拒绝满足该请求。
(XHR)OPTIONS - http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen。
也问了开发朋友,说是访问域的问题,浏览器端直接不允许这样的操作。但是我想通过这种方式来实现跨域访问,还是用c#,还是用mvc方式,有没有好的办法?求助
...全文
500 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 ruan1978 的回复:
我是最新的win10上的浏览器啊!


那你就认真查一下 jquery ajax 如何设置跨域啊!
  • 打赏
  • 举报
回复
跨域必须api提供方做支持,否则你只能后台代码代理调用
ruan1978 2018-08-10
  • 打赏
  • 举报
回复
引用 4 楼 daixf_csdn 的回复:
前端实现,你可以百度:ajax 跨域。答案很多。

谢谢!
ruan1978 2018-08-10
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
不要采用过去的、非标准的所谓跨域方法。

如果一定要给10几年前的淘汰了的浏览器支持跨域,那么你可以在你自己的 asp.net 网站中创建一个“一般处理程序”作为中转服务,你自己的浏览器端访问自己的中转服务就不会有问题,而从服务器端访问就不存在跨域问题。

大师,我是最新的win10上的浏览器啊!
  • 打赏
  • 举报
回复
随便简单点理解,就是代码要这样写
url: "stl201/doorOp/dooropen",

访问自己的服务,然后服务器端再来中转一下。
  • 打赏
  • 举报
回复
不要采用过去的、非标准的所谓跨域方法。

如果一定要给10几年前的淘汰了的浏览器支持跨域,那么你可以在你自己的 asp.net 网站中创建一个“一般处理程序”作为中转服务,你自己的浏览器端访问自己的中转服务就不会有问题,而从服务器端访问就不存在跨域问题。
  • 打赏
  • 举报
回复
html5 有新的标准化的跨域机制,你可以查一下 jquery ajax 如何设置跨域。
圣殿骑士18 2018-08-10
  • 打赏
  • 举报
回复
前端实现,你可以百度:ajax 跨域。答案很多。
圣殿骑士18 2018-08-10
  • 打赏
  • 举报
回复
业务逻辑在后台实现更好。
你说的限制是什么,是这个?

//设置多线程环境下调用HttpWebRequest并发连接限制.注:此值最好不要超过1024
System.Net.ServicePointManager.DefaultConnectionLimit = 512;
ruan1978 2018-08-10
  • 打赏
  • 举报
回复
希望再提供针对性的文章内容。
ruan1978 2018-08-09
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
[quote=引用 楼主 ruan1978 的回复:]
有朋友写了一个操作硬件的接口,用来控制某个硬件设备的开关。他访问的接口是用php给我封装的,也就是用php写了webapi,可以供我调用。他提供的参数方式是这样的:
调用的api接口完整地址:http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen
参数说明:
请求参数:
{
"operatorId":"PZYNjFSErHeqpiVXP69TfxcCal4a",//由我提供,暂时为固定值
"operationId":"27c1913b4829438eba726b7d072446b4",//请求开门命令返回的执行ID号
"lockId":"ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e",//锁编码
"token":"PZYNjFSErHeqpiVXP69TfxcCal4a"//由我提供,暂时为固定值
}
成功调用后的返回参数
{
"result": "success.",//成功
"reason": "fine.",//成功
"timestamp": "2018-6-27 14:33",//操作时间,UTC时间
"oprationId": "27c1913b4829438eba726b7d072446b4 "//本次操作的唯一编码
}
我用vs2012 c#,用mvc方式做了一个简单页面,来调用他的接口,具体页面代码如下:
@{
ViewBag.Title = "测试接口";
}
<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>测试硬件接口</title>
<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<link href="~/CSS/style.css" rel="stylesheet" />
<script type="text/ecmascript">
$(document).ready(function() {
$("#btnLockOpen").click(function () {
$.ajax({
type:"post",
url: "http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen",
contentType:"application/json",
data: { operatorId: "PZYNjFSErHeqpiVXP69TfxcCal4a", operationId: "27c1913b4829438eba726b7d072446b4", lockId: "ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e", token: "PZYNjFSErHeqpiVXP69TfxcCal4a" },
success:function(data){
if(data==true){
$("printresult").html("成功!");
}else{
$("printresult").html("失败!");
}
}
});
})

</script>
</head>
<body>
<p>
<input type="button" id="btnLockOpen" value="开" />
</p>
<div id="printresult">

</div>
</body>
</html>
我运行后,在 ie中,单击页面上的按钮没有任何效果,然后单击按钮看右键,“查看元素”,出现如下提示:
HTTP403: 禁止访问 - 服务器已了解请求,但将拒绝满足该请求。
(XHR)OPTIONS - http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen。
也问了开发朋友,说是访问域的问题,浏览器端直接不允许这样的操作。但是我想通过这种方式来实现跨域访问,还是用c#,还是用mvc方式,有没有好的办法?求助

可以在后端用webclient调用这个接口后返回到前端。
[/quote]
webclient能突破浏览器带来的限制?
  • 打赏
  • 举报
回复
引用 楼主 ruan1978 的回复:
有朋友写了一个操作硬件的接口,用来控制某个硬件设备的开关。他访问的接口是用php给我封装的,也就是用php写了webapi,可以供我调用。他提供的参数方式是这样的:
调用的api接口完整地址:http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen
参数说明:
请求参数:
{
"operatorId":"PZYNjFSErHeqpiVXP69TfxcCal4a",//由我提供,暂时为固定值
"operationId":"27c1913b4829438eba726b7d072446b4",//请求开门命令返回的执行ID号
"lockId":"ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e",//锁编码
"token":"PZYNjFSErHeqpiVXP69TfxcCal4a"//由我提供,暂时为固定值
}
成功调用后的返回参数
{
"result": "success.",//成功
"reason": "fine.",//成功
"timestamp": "2018-6-27 14:33",//操作时间,UTC时间
"oprationId": "27c1913b4829438eba726b7d072446b4 "//本次操作的唯一编码
}
我用vs2012 c#,用mvc方式做了一个简单页面,来调用他的接口,具体页面代码如下:
@{
ViewBag.Title = "测试接口";
}
<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>测试硬件接口</title>
<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<link href="~/CSS/style.css" rel="stylesheet" />
<script type="text/ecmascript">
$(document).ready(function() {
$("#btnLockOpen").click(function () {
$.ajax({
type:"post",
url: "http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen",
contentType:"application/json",
data: { operatorId: "PZYNjFSErHeqpiVXP69TfxcCal4a", operationId: "27c1913b4829438eba726b7d072446b4", lockId: "ee6d7842-7ea3-4f1a-9f39-4c1bb636e55e", token: "PZYNjFSErHeqpiVXP69TfxcCal4a" },
success:function(data){
if(data==true){
$("printresult").html("成功!");
}else{
$("printresult").html("失败!");
}
}
});
})

</script>
</head>
<body>
<p>
<input type="button" id="btnLockOpen" value="开" />
</p>
<div id="printresult">

</div>
</body>
</html>
我运行后,在 ie中,单击页面上的按钮没有任何效果,然后单击按钮看右键,“查看元素”,出现如下提示:
HTTP403: 禁止访问 - 服务器已了解请求,但将拒绝满足该请求。
(XHR)OPTIONS - http://iot-local.joy-iot.com:8123/V1.0.0/stl201/doorOp/dooropen。
也问了开发朋友,说是访问域的问题,浏览器端直接不允许这样的操作。但是我想通过这种方式来实现跨域访问,还是用c#,还是用mvc方式,有没有好的办法?求助

可以在后端用webclient调用这个接口后返回到前端。

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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