AJAX 调用函数输出 JSON 数据,用于前端界面交互或者类 WEB API 接口调用。

1. 建议在项目中建立一个名为 Ajax 的目录,然后将所有 AJAX 调用函数应用项目放在这个目录下。
因为 AutoCSer 默认 Ajax 调用 class 的命名空间的前缀为 项目名称.Ajax.,便于统一管理与维护 AJAX 调用函数,避免与其它 WEB 应用项混淆。

2. 在 Ajax 目录中添加继承自 AutoCSer.WebView.Ajax 的 class,并且申明为 AJAX 调用函数容器 [AutoCSer.WebView.Ajax],支持全局默认配置
也可以添加继承自基于对象池支持实现 AutoCSer.WebView.Ajax<ajaxType> 的 class,ajaxType 用于标识当前类型。

3. 根据需求在 class 中添加 public 实例方法(注意不要添加名称相同的重载方法),项目编译后将生成这些方法的 服务端 / js / ts 调用代理。

假设 API 的调用名称为 Get.Add,在 AutoCSer 客户端脚本这样调用(当 IsOnlyPost = false 时,也可以使用 AutoCSer.HttpRequest.AjaxGet 函数)

AutoCSer.HttpRequest.Ajax(new AutoCSer.HttpRequestQuery('Get.Add', { left: 1, right: 2 }, function(Value) { console.log(Value.Return); }));
如果设置 IsExportTypeScript = true,也可以调用使用生成的 API(就是对上面代码的包装)
AutoCSerAPI.Ajax.Get.Add(1, 2, function(Value) { console.log(Value.Return); });
参考示例 AutoCSer\Example\WebView\Ajax\RefOut.cs
参考示例 AutoCSer\Example\WebView\ViewJs\Api.ts
参考示例 AutoCSer\Example\WebView\Include\AjaxReturnSkin.ts

. 为了防止 WEB 跨域攻击,默认检测 Referer 域名匹配,并且只支持 POST 调用,输入参数解析支持 JSON / XML 两种数据。
为了支持浏览器以外的应用程序访问,支持 FORM / POST + JSON / XML 的任意组合,一共 4 种访问模式。
单纯的 POST 模式必须指定 Content-Type,用与区分 JSON / XML 输入数据。
FORM 模式,使用 name 区分 JSON / XML 输入数据,j 表示 JSON,x 表示 XML。

参考示例 AutoCSer\Example\WebView\Ajax\Post.cs

. 对于非 WEB 调用 API,可以支持 GET 请求,可以忽略 Referer 域名匹配检测,支持 3 种访问模式。
单纯的 Query 只支持 bool / byte / sbyte / ushort / short / uint / int / long / ulong / float / double / decimal / string / enum / DateTime / Guid 这些基础的数据类型解析,其它类型数据将自动当作 JSON 字符串来解析。
Query 模式,使用 name 区分 JSON / XML 输入数据,j 表示 JSON,x 表示 XML。

参考示例 AutoCSer\Example\WebView\Ajax\Get.cs

. 同步 API 支持 ref / out 参数。

参考示例 AutoCSer\Example\WebView\Ajax\RefOut.cs

. 支持异步 API,返回值类型必须为 void,不支持 ref / out 参数,最后一个参数类型必须是委托 Action<AutoCSer.Net.TcpServer.ReturnValue<returnType>>,服务端必须保证该回调委托被执行。

参考示例 AutoCSer\Example\WebView\Ajax\Asynchronous.cs

. 对于只有一个输入或者一个输出参数的情况下,支持 [AutoCSer.Emit.BoxSerialize] 序列化的拆包,直接操作该参数。

参考示例 AutoCSer\Example\WebView\Ajax\BoxSerialize.cs

. 由于 API 默认调用名称为 类型名称.函数名称,当函数需要重载时会产生调用冲突,可以自定义调用名称。

参考示例 AutoCSer\Example\WebView\Ajax\Name.cs