用javascript映射WebAPI,在VisualStudio直接“点”出来

通过用js文件映射服务端的WebAPI,最终实现的效果就是在VS编辑器中直接可以“点”出方法名、参数。

var API = new Object();

/**

* @method _Ajax 异步请求方法

* @param {String} [_type] 请求类型(GET/POST/PUT/DELETE)

* @param {String} [_url] 请求的资源地址

* @param {Object} [_data] 请求时传入的数据为JSON对象

* @param {Function} [_okCall] 请求成功后的回调

* @param {Function} [_errorCall] 请求失败后的回调

*/

API._Ajax = function (_type, _url, _data, _okCall, _errorCall) {

$.ajax({

type: _type,

url: _url,

data: _data,

dataType: "json",

error: function (e) { if (_errorCall != undefined) _errorCall(e); else console.log(JSON.stringify(e)); },

success: function (data) { if (_okCall != undefined) _okCall(data); else console.log(JSON.stringify(data)); },

beforeSend: function (request) {

request.setRequestHeader("Custom-Auth-Name", window.localStorage.getItem("User-Account"));

request.setRequestHeader("Custom-Auth-Key", API._AuthenKey(_url));

},

});

}

/**

* @method _AuthenKey 生成请求密钥

* @param {String} [_resourceUri] 请求的资源地址

*/

API._AuthenKey = function (_resourceUri) {

/*生成guid*/

var Guid = function () {

return ‘xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx‘.replace(/[xy]/g, function (c) {

var r = Math.random() * 16 | 0, v = c == ‘x‘ ? r : (r & 0x3 | 0x8);

return v.toString(16);

});

};

/*MD5加密*/

var Md5 = function (_content, _md5Count) {

if (_md5Count == undefined) { _md5Count = 1; }

for (i = 0; i < _md5Count; i++) {

_content = CryptoJS.MD5(_content).toString().toUpperCase();

}

return _content;

};

/*用户的会话令牌*/

var Token = function () {

/*需要从数据库读取*/

var _userToken = window.localStorage.getItem("User-Token");

/*把token进行2次MD5加密,然后根据服务器格式截取前8位*/

var token = Md5(_userToken, 2).substr(0, 8);

/*转换成加密需要的格式*/

return CryptoJS.enc.Utf8.parse(token);

}

/*请求的资源地址*/

var ResourceUrl = function () {

/*生成GUID*/

var guid = Guid();

if (APP.Debug) {

console.log("guid:" + guid);

}

/*获取资源前缀*/

var BasePsotion = _resourceUri.indexOf("/api/");

/*将请求的资源地址去掉前缀*/

var ResourceUrl = _resourceUri.substr(BasePsotion);

if (APP.Debug) {

console.log("ResourceUrl:" + ResourceUrl);

}

/*把资源和guid做md5,然后在加空格和guid*/

var strToEncrypt = Md5(ResourceUrl + guid) + " " + guid;

if (APP.Debug) {

console.log("strToEncrypt:" + strToEncrypt);

}

/*转换成加密需要的格式*/

return CryptoJS.enc.Utf8.parse(strToEncrypt);

}

/*服务器加密IV*/

var IV = function () { return CryptoJS.enc.Utf8.parse("12345678"); }

/*生成验证密钥*/

var AuthKey = CryptoJS.DES.encrypt(ResourceUrl(), Token(), { iv: IV() });

if (APP.Debug) {

console.log("AuthKey:" + AuthKey);

}

/*返回*/

return AuthKey;

}

/**

* @class API._Method Http请求方法枚举

*/

API._Method = {

/**

* @property Post POST

*/

Post: "POST",

/**

* @property Get GET

*/

Get: "GET",

/**

* @property Put PUT

*/

Put: "PUT",

/**

* @property Delete DELETE

*/

Delete: "DELETE"

};

/**

* @method _Initialise 初始化内部的API方法

*/

API._Initialise = function () {

var APIAgrements = function (_APIUrl) {

var reg = new RegExp(/\{[a-zA-Z0-9_]{1,}\}/g);

var args = _APIUrl.match(reg)

var result = new Array();

if (args != null && args.length > 0) {

for (var i = 0; i < args.length; i++) {

result.push(args[i].substr(1, args[i].length - 2));

}

}

return result;

}

for (var i = 0; i < API._Controller.length; i++) {

var ctrl = API._Controller[i];

/*当前API需要的参数集合*/

var args = APIAgrements(ctrl.Url);

/*拼接API调用时需要传入的参数*/

var apiArgs = args.length > 0 ? (args.join(",") + ",") : "";

var apiUrl = "‘";

if (args.length > 0) {

var urlFormat = new Array();

for (var q = 0; q < args.length; q++) {

urlFormat.push(‘"‘ + args[q] + ‘":‘ + args[q] + ‘‘);

}

apiUrl += ".format({" + urlFormat.join(",") + "})";

}

var api = "API." + ctrl.Name + " = function (" + apiArgs + "_data,_okCall,_errorCall) {" +

"var type=‘" + (ctrl.Method == undefined ? API._Method.Get : ctrl.Method) + "‘;" +

"var url =‘" + ctrl.Url + apiUrl + ";" +

"API._Ajax(type,url,_data,_okCall,_errorCall);" +

"}";

eval("(" + api + ")");

}

}

/**

* @class API._Controller API映射

* 所有配置在这里写

* 【API配置示例】

* 说明:映射License控制器的_CheckLicenseCode方法

* 代码:{ Name: "License", Url: "http://localhost:45617/api/Licenses",Method:API._Method.Post },

* 【API调用示例】

* API.License({ LicenseCode: "FZYF-YDBG" });

* 【其他说明】

* 1,配置API时,Method字段不是必需定义的,默认请求方式是GET

* 2,调用API时,如果不传成功/失败回调方法,框架自动在控制台打印响应内容(测试用)

*/

API._Controller = [

/**

* @property License 授权信息

* @param {String} [DeviceMac] 设备物理地址

* @param {String} [DeviceOS] 设备操作系统信息

* @param {String} [PhoneNumber] 设备注册使用的手机号

* @param {String} [LicenseCode] 录入的验证码

*/

{ Name: "License", Url: "http://192.168.0.111:8866/api/Licenses", Method: API._Method.Post },

/**

* @property NewsCatalog 新闻分类

*/

{ Name: "NewsCatalog", Url: "http://192.168.0.111:8866/api/NewsCatalogs" },

/**

* @property News 新闻列表

* @param {String} [id] 新闻分类的id

*/

{ Name: "News", Url: "http://192.168.0.111:8866/api/TextNews/{id}/News" },

/**

* @property News_Detal 新闻详情

* @param {String} [subid] 新闻id

*/

{ Name: "News_Detal", Url: "http://192.168.0.111:8866/api/TextNews/{NewsID}/Content" },

/**

* @property Logo 图片

*/

{ Name: "Logo", Url: "http://192.168.0.111:8866/api/Corps/{id}/Logo" },

/**

* @property UserAccount账号信息

* @param {String} [UserName] 设备物理地址

* @param {String} [Account] 设备操作系统信息

* @param {String} [Password] 设备注册使用的手机号

* @param {String} [Token] 录入的验证码

* @param {String} [OwnerDept] 录入的验证码

* @param {String} [OwnerDeptID] 当前部门ID

*/

{ Name: "UserAccount", Url: "http://192.168.0.111:8866/api/UserAccounts" },

];

API._Initialise();

备注:以上代码是项目中的,实际还需要修改一下。 这样的话直接在VS编辑器中引入这个文件,就能点出来了

用javascript映射WebAPI,在VisualStudio直接“点”出来

时间: 2024-11-04 18:03:16

用javascript映射WebAPI,在VisualStudio直接“点”出来的相关文章

【前端】开发指南

可用性 咋地了, DOCTYPE? 不定义DOCTYPE是一种可以被判死刑的罪行. 以前你可能用的是下面的DOCTYPE,不过你要知道现在已经有更简洁清晰的代码取而代之了. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 理想的状况是用HTML5 DOCTYPE,所有现

[译]理解 ECMAScript 6 说明

说明 JavaScript核心语言功能定义在ECMA-262中,此标准定义的语言是ECMAScript,浏览器中的JavaScript和Node.js环境是它的超级.当浏览器与Node.js想要通过额外对象和方法增加更多的功能,其语言核心仍是在ECMAScript中定义的,这就是ECMA-262的持续发展对JavaScript整体成功至关重要的原因. 2007年,JavaScript处于十字路口.Ajax的流行使我们进入了动态web应用的新时代,然而.Javascript自从1999年发布的EC

聊聊H5与JS近几年的黑科技

聊聊H5与JS近几年的黑科技 自ajax技术的诞生,编程界兴起了一股WEB开发热,facebook,Twitter等众多大佬级企业都在网页应用上大放异彩,这十年我们见证了前端技术的崛起.这期间产生了众多脱离了浏览器的JS和H5开发的黑科技.移动端的react native,cordova,native.js:PC端的Node.js,NW.js:当然还有前端本身的众多框架,vue.js,jquery.js,bootstrap等等. 所以JS不再是一门单纯的浏览器脚本,作为一个前端开发者如果跟不上前

Python应用与实践-转自(吴秦(Tyler))

1.      Python是什么? 1.1.      Python语言 1.2.      Python哲学 2.      Python在工作中的应用 2.1.      实例1:文件批量处理 2.2.      实例2:xml与excel互转 2.3.      总结 3.      为什么选择Python? 3.1.      前途!钱途! 3.2.      开发效率极高 3.3.      总而言之 4.      还有谁在用Python? 4.1.      国外 4.2.   

js大致复习第一遍

$JavaScript初级-----基础知识 什么是JS(布莱登 艾奇) 是一门脚本语言:不需要编译,直接运行 是一门解释性的语言:遇到一样代码就解释一行代码 是一门动态类型的语言---不解析 是一门基于对象的语言---不解释 是一门弱类型的语言,声明变量的时候都使用var 三个部分 ECMAScript标准: js的基本的语法 * DOM: 文档对象模型(document object model) * BOM: 浏览器对象模型 (browser object model) DOM的作用:操作

听说优秀的Web前端开发工程师都会用这几个工具!

Web前端入行门槛低.薪资待遇高.市场需求大,是很多人进入IT行业的首选语言.工欲善其身必先利器,作为初学前端行业的小白,如果知道一些好用的软件工具可以帮助他们更好的工作.下面,就给大家分享Web前端开发工程师常用的工具. 1.Bootstrap Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式.表单.buttons.表格.网格系统等等. 2.Foundation Foundation是一个易用.强

高德地图行政区域划分(西安)

本来是支持地图下钻的,去掉注释代码即可 <!doctype html> <html lang="zh-CN"> <head> <!-- 原始地址://webapi.amap.com/ui/1.0/ui/geo/DistrictExplorer/examples/index.html --> <base href="//webapi.amap.com/ui/1.0/ui/geo/DistrictExplorer/exampl

高德地图的小细节处理方式

1.引用高德地图的连接后面要加两个参数,一个是版本号一个是key值,两个参数中间用&符号连接 <script type="text/javascript" src='//webapi.amap.com/maps?v=1.4.15&key=0c3lcx084f0195d8ed062bd226b4e591129'></script> 但是这个&符号在xhtml中会变成转义符,导致页面无法正确解析上面的语句,在xhtml中可以用&替换&

JavaScript中的XMLHttpRequest与WebAPI

JavaScript中的XMLHttpRequest与WebAPI它仅仅是一种客户端与服务端的关系.JavaScript中的XMLHttpRequest负责在客户端发起请求,而Web API负责在服务端返回响应. Web API: 和人不同,代码没有一双能够读书或者看图的眼睛.它只能以一种它能读取的格式来查看"某样东西".这也就是数据交换格式(如JSON)的用武之地.Web API是通过HTTP服务进行交互的一组指令和标准.这些交互可以包括创建.读取.更新.删除等操作,且Web API