我想以编程方式禁用某些服务。用户可以通过配置文件指定是否要启用某些功能,如果不启用,则不应公开/创建服务。我知道在创建 AppHost
之前要禁用哪些服务。
现在,我可以使用 RequestFilter
来检查每次服务运行时是否已激活,如果没有激活,则抛出异常。恕我直言,这是一个不优雅的解决方案,Swagger Api 文档仍将包含那些应禁用的服务。
知道如何以优雅的方式做到这一点吗?
最佳答案
您可以将服务捆绑到 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());
...
}
关于c# - 在运行时选择性地禁用 ServiceStack 中的某些 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481316/