首先描述一下我的应用场景
活字格应用生成一个合同编号,返回给OA流程使用。活字格应用与OA服务器因为不在同一个服务器,存在跨域访问问题,导致OA系统客户端浏览器中无法GET我们生成的合同号。
到找了很多解决办法,发现最佳体验是使用JSONP,我在此就不解释什么叫JSONP以及跨域这些专业术语了,因为我也是个小白,就说怎么解决问题。
一、我们开发一个WEBAPI(帮助文件里有),我贴上我的示例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GrapeCity.Forguncy.ServerApi;
using Microsoft.AspNetCore.Http;
namespace 设计院项目数据管理WEBAPI
{
public class PMAPI:ForguncyApi
{
[Get]
public async Task CreateContractNumber()
{
string callback = Context.Request.Query["callback"].ToString();
string ContractNumber = "{\"ContractNumber\":\"晨光设(2022)-085号-01\"}";
await this.Context.Response.WriteAsync(callback + "(" + ContractNumber + ")");
}
}
}
这是一个最简单的生成合同号的WEBAPI
二、将生成的API DLL文件上传到活字格设计器并发布到服务器
三、在客户端页面中使用getJSON(也可以使用ajax将type设为jsonp),获取数据并处理。
<script>
jQuery().ready(function() {
$.getJSON(
"http://10.20.16.9/zs/customapi/pmapi/createcontractnumber?callback=?",
function(data)
{
console.log(data.ContractNumber);
alert(data.ContractNumber);
})
});
</script>
上边红色部门为调用的WEBAPI,蓝色部分为处理的方法,data就是返回数据,比如上边我们返回的数据data.ContractNumber就是返回的合同号
这里顺带提下需求,真心希望活字格服务器命令返回命令能支持jsonp的返回,像这样的跨域需求真心太需要了。
|