在运行时期间有选择地禁用ServiceStack中的某些REST服务

时间:2013-05-10 11:34:23

标签: c# rest configuration servicestack

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

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

如何以优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以将服务捆绑到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());
    ...
}