.net Mvc 程序通过Route拦截,实现网站白名单

在实施路由拦截之前,通过下图先了解当请求到达Mvc程序后数据如何在管道中流动:


http请求.png

此过程将分为三步:

1.通过继承“RouteBase”来自定义用于我们自己的Route:

public class CustomRout : RouteBase
{
    //白名单集合
    List<string> hosts = new List<string>()
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        //通过“UserAgent”判断浏览器版本实施拦截
        //if (httpContext.Request.UserAgent.Contains("Mozilla/5.0 (Windows NT 10.0; Win64; x64)"))
        //{
            //return null;
        //}
       if (hosts.FindIndex(h => h == httpContext.Request.Url.Host) > 0) 
       {
              //不做拦截处理
              return null;
        }
        else
        {
            //跳转到指定页面
            var routData = new RouteData(this, new MvcRouteHandler());
            routData.Values.Add("controller", "Pipe");
            routData.Values.Add("action", "Refuse");
            return routData;
        }
    }
    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}

注:下图是通过反编译源代码后,框架里创建Route方式,因此可以借鉴来创建自己的Route

创建Route.png

2.将自定义Route在“RouteConfig.cs”文件中进行注册:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)  //配置路由
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //忽略路由         
        routes.Add("chrome", new CustomRout());
        routes.MapRoute( //常规路由 
            url: "{controller}/{action}/{id}",
            name: "Default", //路由名称  被作为路由集合的Key  this[int index]  不能重复
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

3.Route匹配:


匹配路由.png

注:通过上面的代码将Route注册到RouteCollection集合中去后,框架会遍历该集合,一旦找到匹配Route,立即返回。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ASP.NET是使用HTML、CSS、JS和服务端脚本创建Web页面和网站的开发框架。 ASP.NET支持三种开发...
    JunChow520阅读 1,704评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,014评论 19 139
  • ASP.NET MVC是如何运行的 ASP.NET MVC由于采用了管道式设计,所以具有很好的扩展性,整个ASP....
    JunChow520阅读 390评论 0 0
  • 当前,MVC作为一种主流框架,被广泛运用,如JAVA Web开发,.NET ASP,NET MVC (1)MVC由...
    Kaiweio阅读 911评论 0 4
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,349评论 0 13