登录 [HttpPost] [AnonymousSign] public DealResult Login([FromBody] Login parame) { ) { ); } string key2 = System.Guid.NewGuid().ToString(); string voucher = System.Guid.NewGuid().ToString(); var user = new User() { Name = parame.Name, Id = 1, Key = key2, Voucher = voucher }; var timeDiff = (DateTime.Now - Convert.ToDateTime(parame.Time)).TotalSeconds;//保存客户端和服务端时间差 LoginStatusContext.SetLoginStatus(voucher, user.Id, key2, timeDiff); CoreHelper.CookieHelper.AddCookies(, voucher);DealResult(true, "", user); }
View Code这里可以看到,创建了两个GUID,一个为用户凭证,一个为用户密钥,放入用户信息返回,同时调用LoginStatusContext.SetLoginStatus保存登录信息
同时使用了AnonymousSign标注,此方法使用默认签名Setting.DefaultKey
定义获取用信息方法
基本信息 [HttpGet] public DealResult GetBasicInfo(string name) { var user = new User() { Name = name, Id = CurrentUserId }; return DealResult(true, string.Empty, user); }
View Code
示例控制器完整定义
帐号操作 /// </summary> [SignCheckAttribute] public class AccountController : BaseController { 登录 [HttpPost] [AnonymousSign] public DealResult Login([FromBody] Login parame) { ) { ); } string key2 = System.Guid.NewGuid().ToString(); string voucher = System.Guid.NewGuid().ToString(); var user = new User() { Name = parame.Name, Id = 1, Key = key2, Voucher = voucher }; var timeDiff = (DateTime.Now - Convert.ToDateTime(parame.Time)).TotalSeconds;//保存客户端和服务端时间差 LoginStatusContext.SetLoginStatus(voucher, user.Id, key2, timeDiff); CoreHelper.CookieHelper.AddCookies(, voucher);DealResult(true, "", user); } 基本信息 [HttpGet] public DealResult GetBasicInfo(string name) { var user = new User() { Name = name, Id = CurrentUserId }; return DealResult(true, string.Empty, user); } 测试异常 [HttpGet] public DealResult TestException() { int a = 0; var b = 10 / a; return DealResult(true); } }
View Code
此控制器标注了SignCheckAttribute用以进行签名判断
具体实现可看SignCheckAttribute代码
SignCheckAttribute里实现了有
为了统一处理异常,配置了异常处理
GlobalConfiguration.Configuration.Filters.Add(new ExceptionAttribute());
对接口进行测试大杀器来了,配合此方案放出了对应的测试工具,虽然WEB API有个扩展,但没法对此方案测试
使用此工具能方便按方案要求调用接口,为了方便参数拼接,POST和GET都采用URL参数的形式输入
测试登录/api/account/login
测试获取信息/api/account/GetBasicInfo
测试异常处理/api/account/TestException
在未登录情况下调用获取信息
接口文档接口结构文档一直是很让人头疼的事,手写更改了又得维护,版本不一样还麻烦,自动生成最好了,同样WEB API 带扩展没法表示此结构详细
大杀器2号来了,按代码注释动态生成接口文档,文档格式与控制器保持一致
Home控制器代码实现