运行时有选择地禁用ServiceStack中的部分REST服务

本文关键字:REST 服务 ServiceStack 选择地 运行时 | 更新日期: 2023-09-27 18:13:12

我想以编程方式禁用一些服务。用户可以通过配置文件指定是否启用某些功能,如果不启用,则不应该公开/创建服务。在创建AppHost之前,我知道要禁用哪些服务。

现在,我可以使用RequestFilter在每次运行服务时检查它是否被激活,如果没有,则抛出异常。依我之见,这是一个不优雅的解决方案,并且Swagger Api文档仍然包含那些应该被禁用的服务。

有什么好的方法吗?

运行时有选择地禁用ServiceStack中的部分REST服务

您可以将服务捆绑到IPlugin中,但您必须手动设置路由。这就是/metadata的工作原理。

public class MyOptionalServicesPlugin : IPlugin
{
    public void Register(IAppHost appHost)
    {
         var settings = new AppSettings();
         var enableSpecialService1 = settings.Get<bool>("enableSpecialService1", false);
         if (enableSpecialService1)
         {
             appHost.RegisterService(typeof(SpecialService1), new[] { "/special/service-1" });
         }
         ...
    }
 }

然后在AppHost:

public void Register(Funq.Container container)
{
    Plugins.Add(new MyOptionsServicesPlugin());
    ...
}