假设我有两个Web项目,一个ASP.NET MVC和其他ASP.NET WebAPI。
他们在不同的项目中运行,并在不同的主机上运行(www.whatever.com和data.whatever.com)。
MVC项目需要指示WebApi项目中端点的绝对URL。
这会是一种优雅的方式吗?我想避免的是硬编码URL。也许类似于共享路径集合并使用一些技巧来生成给出主机名的完整URL。
答案 0 :(得分:2)
这是不可能的。虽然你可以做一些动态的程序集加载来创建一个使用另一个项目的路由的UrlHelper
,但它非常重要并且需要项目之间的硬依赖性,这种做法否定了分离的目的他们首先进入不同的项目。值得一提的是,如果您的Web Api控制器与MVC控制器位于同一个项目中(完全可以),那么您可以获得Web Api端点的URL,就像任何其他操作一样。
即使您通过在其他程序集中动态加载来创建UrlHelper
,仍然只会为您提供路径。 Web Api项目的实际域和应用程序根目录不可能超出Web Api项目本身。
虽然我完全认同您不想对Web Api端点URL进行硬编码,但您真的没有选择。您可以通过将调用包装到某个类中的Web Api来缓解这种情况,这至少可以将所有URL保存在一个位置。您可能还会考虑类似Refit的内容,它可以让您创建一个或多个代表您的Web Api的接口,允许您抽象URL和所有基础结构以访问它并在一次失败中使用响应
答案 1 :(得分:0)
在这些场景中,我会将这些内容放入web.config文件中的AppSettings中。虽然您仍然需要自己指定网址,但至少可以根据部署情况指定不同的网址,例如qa vs production与本地开发机器。
答案 2 :(得分:0)
这就是为什么配置文件。在ASP.NET中 - 它首先是你的应用程序实例的Web.Config。您可以使用AppSettings部分并通过密钥添加URL,或者如果您愿意,可以创建自己的配置部分,但我认为在您的情况下它是过度的。
<configuration>
<appSettings>
<add key="WebApiEndpointURL" value="http://localhost/WebApi/" />
在应用程序中,您始终可以从System.Configuration命名空间访问它。
Dim sURL as String = _
System.Configuration.ConfigurationManager.AppSettings("WebApiEndpointURL")