关于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, }); } } }

 

posted @ 2021-04-22 16:17  Poner_鹏儿  阅读(412)  评论(0)    收藏  举报