在实际编写接口的过程中难免有一些特殊的接口,比如动态参数接口,以“JTT1078-2016道路运输车辆卫星定位系统视频通信协议(扫描版)”中的HTTP URL服务要求为例,截图如下:
定义API接口和请求方式
接口定义要满足需求,这里通过四种HTTP 请求方式。
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace RTVSApi.Controllers { /// <summary> /// 政府音视频监管平台请求接口服务API /// </summary> public class MonitorController : ApiController { /// <summary> /// 政府音视频监管平台发送音视频连接指令 /// </summary> /// <param name="param">参数字符串:[车牌号码].[车牌颜色].[逻辑通道号].[音视频标志].[时效口令]</param> /// <returns></returns> [Route("{param}")] [HttpGet] [HttpPost] [HttpPut] [HttpDelete] public void RealTimeConnection(string param) { if (string.IsNullOrEmpty(param)) return; string[] paramArray = param.Split('.'); // 参数须满足固定长度 if (paramArray.Length==5) { string CarNumber = paramArray[0]; string CarPlateColor = paramArray[1]; string Channel = paramArray[2]; string AVType = paramArray[3]; string TimedPassword = paramArray[4]; } } } }
配置指定接口的路由方式
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace RTVSApi { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Monitor", url: "{param}", defaults: new { controller = "Monitor", action = "RealTimeConnection", id = UrlParameter.Optional } ); } } }
运行项目查看定好的接口是否可行
查看接口目录列表:以GET请求方式为例,我们查看参数情况:
经过调试,请求可以进去,但是加了'.'的字符感觉有点问题,总之大的方向是对的。
参考文章:WebAPI路由分析
AcceptVerbs注解实现HTTP多请求方式
[AcceptVerbs("Get", "Post")] //用AcceptVerbs标识即可 public List<PUB_HqewIndexResult> GetSalesRankByHqewIndex() { List<PUB_HqewIndexResult> resultList = new List<PUB_HqewIndexResult>(); DMSParam dmsParam = new DMSParam(); List<PUB_Stock> stockList = new List<PUB_Stock>(); IResult stockResult = ExecuteDmsParam(dmsParam, new PUB_HqewIndex(), "PUB.PUB_HqewIndexBLL", "GetSalesRankByHqewIndex"); if (stockResult.Complete == DMSComplete.Succeed) { if (stockResult != null && stockResult.Result != null) { resultList = (List<PUB_HqewIndexResult>)stockResult.Result; } } return resultList; }