今天在博客园首页看到一篇关于写 RESTful, 大致就是前端定义的一种规范. 原文如下,
https://www.cnblogs.com/zhangmumu/p/11936262.html
看了一圈才发现, 在目前的公司, 4年来一直在用这种 "规范", 感觉也就是约定俗成的东西.
首先说一下, API接口的 路由配置 WebApiConfig.cs
第一步: 代码如下, 这里路由格式为 v1/{controller}/{id} , 版本 指定 v1
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "v1/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.EnableSystemDiagnosticsTracing(); } }
第二步: 对于API接口 返回的内容, 做一个规范 (这里一般返回json数据) , 结果实体类如下:
//WebAPI 数据结果类 public class Root<T> { public bool Result { get; set; } public string ErrorCode { get; set; } public string Message { get; set; } public T Data { get; set; } public Root() { } public Root(bool r, string e, string m) { Result = r; ErrorCode = e; Message = m; } public Root(bool r, string e, string m, T data) { Result = r; ErrorCode = e; Message = m; Data = data; } }
第三步: API 接口定义
public class GetXxDataController : ApiController { // 这里有一行权限验证 代码 (...) public HttpResponseMessage Post([FromBody]QueryParms parms) //QueryParms 是一个 类,参数字段都在这个类里面 { string msg; try { string json = new XxDataBLL().QueryXxData(parms); //直接返回 json信息
//如果是返回某一个实体类(或者List<T>) , 将其 json 序列化一下.
// string json = Newtonsoft.Json.JsonConvert.SerializeObject(List<T>);
Root<string> root = new Root<string>() { Result = true, ErrorCode = "0", Message = "", Data = json };
/*
//或者直接 返回 Root<T>
List<XxData> dataList = new XxDataBLL().QueryXxDataList(parms);//一个查询方法, 返回一个 List<T>
Root<XxData> root = new Root<XxData>()
{
Result = true,
ErrorCode = "0",
Message = "接口调用成功!",
Data = dataList
};
*/
return Request.CreateResponse(HttpStatusCode.OK, root);
} catch (Exception ex) { if (ex.InnerException != null) { msg = ex.InnerException.Message; } else { msg = ex.Message; } return Request.CreateResponse(HttpStatusCode.OK, new Root<string>(false, "-1", msg)); //如果出错返回一个错误的json, 状态是 false. } } }