从Web API构造函数C#访问过滤器属性

时间:2017-09-12 13:42:01

标签: c# dependency-injection asp.net-web-api2 webapi2

我觉得我有这个错误(或倒退)。我正在寻找确定请求来自哪个环境,以便我可以确定要访问的数据库(基于引用者URL)。

终点是"自托管"我们的某个服务器上的API,并且我希望将来自开发生产的请求发送到服务,并相应地处理请求。我希望避免添加其他框架,以及避免在每个动作调用中处理环境。

这是我到目前为止所做的事情。

public ServiceProvider svc;
public ECTaskService lab;

public BaseAPIController()
{
    //I WAS HOPING FOR THE ENVIRONMENT REFERENCE HERE.... 
    svc = new ServiceProvider();
    lab = new ECTaskService();
}

我希望我可以从上面的构造函数访问下面的过滤器上下文,将环境传递给服务提供者,服务提供者将根据需要处理数据库/ dev环境的所有方面。

public class LabelServerFilter : ActionFilterAttribute {
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        Environment(actionContext);
        base.OnActionExecuting(actionContext);
    }

    public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        Environment(actionContext);
        return base.OnActionExecutingAsync(actionContext, cancellationToken);
    }

    public string Environment(HttpActionContext actionContext)
    {
        try
        {
            var env = "PRODUCTION";
            Uri referrer = actionContext.Request.Headers.Referrer;
            if (referrer != null)
            {
                string clientDomain = referrer.GetLeftPart(UriPartial.Authority);
                if (clientDomain.IndexOf("myinternalurldev") > -1)
                {
                    env = "DEVELOPMENT";
                }
            }
            //Console.Write("[" + env + "]");
            return env;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message, ex);
        }
        return "PRODUCTION";
    }
}

提前致谢!

0 个答案:

没有答案