zoukankan      html  css  js  c++  java
  • 在MVC的ApiController中实现统一校验

    在对外公布的Web API中,我们要实现合法性的校验。 每一个API都去写校验代码,有点那个...

    很自然的,我们写一个中间的基类,继承自  ApiController,并在统一调用入口进行校验,如果不合法,就给出不合法的信息。

    我使用的代码如下:

    using System;
    using System.Net;
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Web;

    using System.Web.Http; 

    public class _ApiController : ApiController {  

            public override System.Threading.Tasks.Task<HttpResponseMessage> ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext controllerContext, System.Threading.CancellationToken cancellationToken)
            {
                var httpContext = (HttpContextWrapper)controllerContext.Request.Properties["MS_HttpContext"];
                string sig = httpContext.Request["sig"];
                string client_ip = httpContext.Request.UserHostAddress;
                
                if (client_ip != "127.0.0.1")
                    return Task.Factory.StartNew(() => { return controllerContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "错误的客户端地址。"); }, cancellationToken);
                if (sig != ".........")
                    return Task.Factory.StartNew(() => { return controllerContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "错误的签名。"); }, cancellationToken);
                return base.ExecuteAsync(controllerContext, cancellationToken);
            }

     }

     

    红色的地方是我的纠结点。 

    参考文档:

    http://www.strathweb.com/2012/05/implementing-message-handlers-to-track-your-asp-net-web-api-usage/
  • 相关阅读:
    vue 封装tarbar组件
    vue 路由守卫
    mint ui switch 开关
    数据库与实例的关系
    Grafana使用总结
    阿里P7前端需要哪些技能
    laravel -- 自定义Api接口全局异常处理
    laravel -- 单元测试
    laravel 项目迁移后重新生成链接文件
    laravel HTTP 请求, 接受参数处理
  • 原文地址:https://www.cnblogs.com/cloudbeer/p/2706899.html
Copyright © 2011-2022 走看看