guoqp 发表于 2022-11-2 15:40:36

WEB API + JSONP解决跨域问题【仅支持GET请求,可带参数】

首先描述一下我的应用场景

活字格应用生成一个合同编号,返回给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
    {
      
      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的返回,像这样的跨域需求真心太需要了。
页: [1]
查看完整版本: WEB API + JSONP解决跨域问题【仅支持GET请求,可带参数】