【发布时间】:2014-09-10 04:08:32
【问题描述】:
我的 web api 2 应该向客户端提供两个 url:test.mydomain.com 和 production.mydomain.com 当客户端访问测试时,我想为生产 url 实例化测试数据库上下文和生产数据库。
目前我可以手动实例化两者:在控制器内的每个操作上,我可以检查 url 并确定是否加载这个,如果加载那个。 但是我想自动设置数据库,而不检查每个操作的请求 url。我尝试在控制器构造函数中读取请求上下文,但在那个阶段它不存在。
动作过滤器? OnAction 执行?但是我如何在过滤器中实例化它并在控制器操作中使用它呢?还有什么建议吗?
【问题讨论】:
-
这听起来比它需要的复杂得多。您的数据库架构在您的测试环境和生产环境中是否相同(如果它们不同,则无法达到目的)。如果是这样,只需为连接到正确数据库的每个环境使用 Web.config。
-
嗨贾斯汀,这不是不同环境的问题。它是相同的应用程序,相同的控制器。唯一的事情是我需要在运行时根据请求 url 设置实体上下文。我不想复制整个代码。
-
如果您想避免任何过度设计,您可以简单地使用 factory,它会接收当前 URL 并提供正确的
DbContext,然后在您的请求处理开始时您只需写:using (MyContext context = ContextFactory.Get(currentUrl)){ ... }
标签: asp.net entity-framework asp.net-web-api routing