• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

API调用

姎楹 2020-08-04 10:48:43
在做aspnet+MVC的系统时,需要调用别的系统的api接口,更新他们那边的数据
在网上找了很多,本来是想写后台的,因为可以判断接口是否成功然后再更新自己这边的表
但是大多是js调用的,类似这样

var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
$.ajax({
type: "get",
url: "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm",
data: { tel: "180520410" },//postdata
dataType: 'jsonp',
crossDomain: true,
success: function (data, status) {
if (status == "success") {
alert(data);
//$.lrSaveForm(top.$.rootUrl + '/FK_Production/Basic_Model/Clean', { BM_Id: bm_id }, function (res) {
// page.search();
//});
}
}
});

上面列子是get,因为是第一次调用api,怎么感觉和之前写的前端调用后台方法一样,
想请问下就我这个需求,用js调用是不是可以的?
...全文
2186 点赞 收藏 12
写回复
12 条回复
正怒月神 2020年08月05日
引用 11 楼 姎楹 的回复:
[quote=引用 10 楼 正怒月神 的回复:]
我是这么写的,调用是成功的能改数据[/quote] 我让你使用同步方案的原因是,因为你的外部调用是同步方案。 而同步方案+内部的异步方案,可能会造成死锁。 异步具有感染性质。就是从底层开始异步,往往就会使得上层全部改为异步。 因此,我建议你使用同步方法。在之前给出的url中,有同步方法。
回复 点赞
姎楹 2020年08月05日
引用 10 楼 正怒月神 的回复:

public async void APIPost(string BM_Id, string State)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("BM_Id", BM_Id);
            dic.Add("State", State);
            var content = new FormUrlEncodedContent(dic);
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://localhost:55931/");
            var result = await client.PostAsync("ActionApi/UserInfo/UpdateState?BM_Id=" + BM_Id+ "&State="+State, content);
            Console.WriteLine("Result:{0}", result);
        }
调用:a.APIPost(BM_Id, "已清洗"); apidemo:

public class UserInfoController : ApiController
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        //private SqlDataAdapter adapter = null;  
        //为了方便,设为全局对象的sql语句  
        private string sql = null;
        private ApiTools tool = new ApiTools();
        [HttpPost]
        [HttpGet]
        public int UpdateState(string BM_Id,string State)
        {
            sql = "update Basic_Model set BM_State='"+ State + "' where BM_Id='" + BM_Id + "'";
            int i=execute(sql);
            return i;
        }
我是这么写的,调用是成功的能改数据
回复 点赞
正怒月神 2020年08月05日
引用 9 楼 姎楹 的回复:
[quote=引用 8 楼 正怒月神 的回复:]
对方说她的api是异步的[/quote] 不不用管对方是什么,你先同步就是了
回复 点赞
姎楹 2020年08月05日
引用 8 楼 正怒月神 的回复:
对方说她的api是异步的
回复 点赞
masanaka 2020年08月04日
如果对方api允许跨域的话,前后台调用都可以。
但是因为是更新类的api,那应该会有身份票据类的信息要提供,这个要从安全性的角度考虑,这些相对敏感的数据暴露在前端会不会有问题。
回复 点赞
你要在服务器C# 调用,可以使用 HttpWebRequest 类,类似。
回复 点赞
正怒月神 2020年08月04日
引用 4 楼 姎楹 的回复:
[quote=引用 3 楼 正怒月神 的回复:]C# 后台调用api 我这是调用失败了吗
你用链接里的同步,别用异步。 因为你用异步的方式是错误的。。。
回复 点赞
姎楹 2020年08月04日
引用 6 楼 欧皇神降术 的回复:
跟踪发现get是能取到数据的,就是不写到控制台
回复 点赞
欧皇神降术 2020年08月04日
跨域是浏览器拦截了。所以客户端请求时没有跨域这一说的。函数求值需要运行所有线程,不代表接口失败了。你这个应该按F11进入方法 继续调试
回复 点赞
姎楹 2020年08月04日
引用 2 楼 masanaka 的回复:
的确是,我从网上找了好几个api接口,在js调用的时候都会跨域之类的,估计前台写行不通了
回复 点赞
姎楹 2020年08月04日
引用 3 楼 正怒月神 的回复:
C# 后台调用api
这个列子我看见过,我当时新建了个CallWebAPI类,但是知道怎么调用,我刚又建了一个 因为没有post的列子,我测试的get 应该要返回些东西到控制台吧,我调试说是:函数求值需要运行所有线程 我这是调用失败了吗
回复 点赞
正怒月神 2020年08月04日
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告