在新版本的BeetleX.FastHttpApi中集成了IP访问策略和URL重写两个功能,经过IP访问策略能够制定服务针对不一样IP的访问限制控制;而URL重写则能够制定更好的URL访问方式。如下介绍这两的功能的使用:html
IP策略git
组件在1.6.7
开始集成了IP限制功能,能够经过配置白名单或黑名单的方式来配置可访问的IP。该功能默认状况是禁用,若是有须要则打开此功能来对访问进行限制(该功能暂只对IPv4有效,IPv6则暂时无效)。github
能够经过HttpApiServer.IPv4Tables.Type
配置IP访问限制,默认值是None
不开启,配置Black
开启默名单限制,全部在黑名单中的IP不能访问服务;配置White
开启白名单,全部在白名单中的IP才能访问服务。能够经过如下方法来添加IPweb
AddWhite
方法添加白名单IPjson
HttpApiServer.IPv4Tables.AddWhite("192.168.2.1/24","192.168.1.18");
AddBlack
方法添加黑名单IPapi
HttpApiServer.IPv4Tables.AddBlack("192.168.2.1/24","192.168.1.18");
能够经过文件来配置,在目录下编辑iptables.json
(若是文件不存在自行添加)优化
{ "Type": "White", "WhiteList": [ "192.168.2.1/24", "192.168.2.18" ], "BlackList": [ "192.168.2.1/24" ] }
Url重写url
经过Url重写能够提升Url访问友好性同时不须要调整原有服务的Url访问地址,组件在新版本对Url重写进行的优化调整,以支持更灵活的重写功能。spa
能够经过HttpApiServer.UrlRewrite.Add
方法来添加Url重写规则.插件
server.UrlRewrite.Add("/cate/{0}.html", "/index.html");
以上重写是把/cate/
下面的全部html重写到index.html
.
若是不想经过写代码来完成,能够配置目录下的rewrite.json
文件(不存在则自行添加)
[ { "Url": "/cate/{0}.html", "Rewrite": "/index.html" } ]
组件对Url重写的依据是BaseUrl
基础访问路径进行匹配,匹配方式不匹分大小写。经过{name}
来描述一个Url的可变部分,name
是一个变量名,这个变量能够在重写Url部分使用,一个Url能够有多个变量描述.这些重写的变量都会被写入到HttpContext的请求数据中,更方便绑定到控制器参数上.
示例一
{ "Url": "/api/customers/{count}", "Rewrite": "/customers/{count}" }
示例二
{ "Url": "/api/{user}/{id}", "Rewrite": "/api/{user}?id={id}" }
官方blog
server.UrlRewrite.Add("/cate/{0}.html", "/index.html", "html") .Add("/search/{0}.html", "/index.html", "html") .Add("/tag/{0}.html", "/index.html", "html") .Add("/blog/{0}.html", "/blog.html", "html") .Add("/photos/{0}.html", "/photos.html", "html");
以上是 http://ikende.com/blog/ 的一个重写规则,把分类,标签和查询都路由到index.html
页面处理了。
静态规则有时候很难知足应用的须要,所以组件HttpRequest
提供UrlRewriteTo
方法用于重写当前的请求Url。那何时使用动态重写呢?如下描述一个简单的场景来表述动态重写的做用,当一个API提供了一个V1版后又开发了V2版本,但但愿用户在不改变Url基础规则的状况能够兼容两种版本的调用;出现这状况通常会想到在前置代理作一些转发规则来知足需求,但组件提供动态重写则能够知足这样的需求。
[Controller(BaseUrl = "Api")] public class Api { public object Hello(string name) { return $"hello {name} {DateTime.Now}"; } } [Controller(BaseUrl = "/v2/Api")] public class ApiV2 : IController { public object Hello(string name) { return $"hello {name} {DateTime.Now} v2"; } [NotAction] public void Init(HttpApiServer server, string path) { server.HttpRequesting += (o, e) => { if (e.Request.BaseUrl.IndexOf("/api", StringComparison.OrdinalIgnoreCase) >= 0) { if (e.Request.Data["version"] == "v2") { e.Request.UrlRewriteTo("/v2" + e.Request.Url); } } }; } }
只须要在实现V2版本中对HttpRequesting
进行一个监听并根据状况进行处理便可以;而V1的代码无须更改,已有的Url没有变化,只须要在新的调用中添加对应的版本描述即实现。
Url重写是BeetleX的webapi基础功能,所以对应的服务网关也能够定义相关url重写功能用于服务转发上.服务网关重写插件使用:https://github.com/IKende/Bumblebee/wiki/Url重写