关于ApiController 验证相关示例
WebApiConfig配置:

实体部分:
/// <summary> /// 服务固定响应 /// </summary> public class ApiResult { /// <summary> /// 服务器处理结果,1为成功,0为失败 /// </summary> public int Status { get; set; } /// <summary> /// 消息 /// </summary> public Status Msg { get; set; } } /// <summary> /// 服务器处理结果 1-成功 0-失败 /// </summary> public enum Status { /// <summary> /// 成功 /// </summary> Win = 1, /// <summary> /// 失败 /// </summary> Fail =0, }
/// <summary>
/// 获取服务器时间结果
/// </summary>
public class ServerTimeResult : ApiResult
{
/// <summary>
/// 服务器时间,固定格式为yyyy-MM-dd HH:mm:ss
/// </summary>
public string Time { get; set; }
}
写一个Base控制器,以供继承方便使用。
public class BaseController : ApiController {
//重写ApiController的ExecuteAsync方法,虽然不知道是干嘛的,反正这样写就对了(*╹▽╹*),具体的今后再研究 public override System.Threading.Tasks.Task<HttpResponseMessage> ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext controllerContext, System.Threading.CancellationToken cancellationToken) { try { if (验证) { throw new Exception("验证失败"); } return base.ExecuteAsync(controllerContext, cancellationToken); } catch (Exception ex) { HttpResponseMessage message = new HttpResponseMessage(); message.StatusCode = System.Net.HttpStatusCode.OK; string json = JsonConvert.SerializeObject(new ApiResult() { Status = Status.Fail, Msg = ex.Message }); StringContent Content = new StringContent(json, Encoding.GetEncoding("GB2312"), "application/json"); message.Content = Content; return Task.Factory.StartNew(() => { return message; }, cancellationToken); } }
//这个方法是拿来按照返统一的编码格式返回数据用的,比如要求返回的参数必须是json且编码gb2312的时候就可以用这个方法
//要是没有这个需求,直接返回一个实体也行
public HttpResponseMessage ResultInfo(object ResultInfo)
{
HttpResponseMessage message = new HttpResponseMessage();
message.StatusCode = System.Net.HttpStatusCode.OK;
string json = JsonConvert.SerializeObject(ResultInfo);
StringContent Content = new StringContent(json, Encoding.GetEncoding("GB2312"), "application/json");
message.Content = Content;
return message;
}
}
任务控制器
/// <summary> /// 任务控制器,继承自BaseController控制器 /// </summary> public class TaskController : BaseController { /// <summary> /// 获取服务器时间 /// </summary> /// <param name="request"></param> /// <returns></returns> [Route("swp/v1/ServerTime")]
//虚拟路由。比如服务器程序实际的路由路径是“demo/apis/Server/ServerTime”,
//但只要写了这句就可以把这个控制器的路径虚拟成“swp/v1/ServerTime”使用这个虚拟路径访问时就可以跑到这个ServerTime控制器来了,
//当然,原本的路径依然是可以访问的。嗯嗯~我是这么理解的_(:з」∠)_ [HttpPost] public HttpResponseMessage ServerTime(ApiRequest request) { try { ServerTimeResult STR = new ServerTimeResult(); STR.Status = Status.Win; STR.Msg = "获取成功"; STR.Time = DateTime.Now.ToString("yyyy-MMdd HH:mm:ss"); return ResultInfo(STR); } catch (Exception ex) { return ResultInfo(new ApiResult() { Status = Status.Fail, Msg = ex.Message, }); } } }

浙公网安备 33010602011771号