Wcf Web API沙箱端点处理

时间:2011-06-11 02:01:21

标签: c# api sandbox wcf-web-api

我有一个api,将公开曝光并有一个沙盒。我已经在我的ResourceFactory中写了一些代码,所以api.sandbox.whatever /无论什么工作,参数中的sandbox = true都可以工作,但这感觉就像一个巨大的黑客。有没有更好的方法呢?

这是我的代码:

public class NinjectResourceFactory : IResourceFactory
{
    private readonly IKernel _productionKernel;
    private readonly IKernel _sandboxKernel;

    public NinjectResourceFactory()
    {
        _productionKernel = new StandardKernel(new QueryMasterModule());
        _sandboxKernel = new StandardKernel(new QueryMasterModule(true));
    }

    public object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
    {                        
        string uri = request.RequestUri.ToString();
        if (uri.Contains(".sandbox."))
        {
            return _sandboxKernel.Get(serviceType);
        }
        else if (uri.Contains("sandbox=true"))
        {
            request.RequestUri = new Uri(uri.Replace("sandbox=true", ""));
            return _sandboxKernel.Get(serviceType);
        }
        else
        {
            return _productionKernel.Get(serviceType);    
        }            
    }

    public void ReleaseInstance(InstanceContext instanceContext, object service)
    {
        // todo do I need to implement this?
    }
}

1 个答案:

答案 0 :(得分:0)

如果它应该是一个真正的沙箱,那么你不希望这两个站点在同一个进程中运行。我将部署两个网站,让IIS根据主机名决定哪一个。这样沙箱将与生产隔离,这是沙箱的目的。