Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在项目之间共享URL的优雅方式?_Asp.net Mvc_Asp.net Web Api_Asp.net Mvc 5_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 在项目之间共享URL的优雅方式?

Asp.net mvc 在项目之间共享URL的优雅方式?,asp.net-mvc,asp.net-web-api,asp.net-mvc-5,asp.net-mvc-routing,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc 5,Asp.net Mvc Routing,假设我有两个web项目,一个是ASP.NETMVC,另一个是ASP.NETWebAPI 它们位于不同的项目中,运行在不同的主机上(www.whater.com和data.whater.com) MVC项目需要指明WebApi项目中端点的绝对URL 哪一种方式比较优雅?我想避免的是硬编码URL。也许可以共享路由集合,并使用一些技巧生成给出主机名的完整url。这是不可能的。虽然您可以执行一些动态程序集加载来创建一个使用另一个项目的路由的UrlHelper,但这并不简单,而且需要项目之间有一个硬依赖关

假设我有两个web项目,一个是ASP.NETMVC,另一个是ASP.NETWebAPI

它们位于不同的项目中,运行在不同的主机上(www.whater.com和data.whater.com)

MVC项目需要指明WebApi项目中端点的绝对URL


哪一种方式比较优雅?我想避免的是硬编码URL。也许可以共享路由集合,并使用一些技巧生成给出主机名的完整url。

这是不可能的。虽然您可以执行一些动态程序集加载来创建一个使用另一个项目的路由的
UrlHelper
,但这并不简单,而且需要项目之间有一个硬依赖关系,这一点从一开始就否定了将它们分为不同项目的目的。值得一提的是,如果您的Web Api控制器与MVC控制器位于同一个项目中(这很好),那么您可以像其他任何操作一样获取Web Api端点的URL

即使您通过在另一个程序集中动态加载创建了
UrlHelper
,它仍然只为您提供路径。Web Api项目的实际域和应用程序根不可能超出Web Api项目本身


虽然我完全同意您不硬编码WebAPI端点URL的愿望,但您在这里真的没有选择。您可以通过将对Web Api的调用封装在某个类中来缓解这种情况,该类至少将所有URL保存在一个位置。你也可以考虑一些类似的东西,它可以让你创建一个或多个接口来代表你的Web API,允许你抽象URL和所有的基础设施来访问它,并在一次失败中使用响应。

< P>在这些场景中,我会把这些放到你的Web.CONFIG文件中的AppSt设置中。虽然您仍然需要自己指定URL,但至少这允许您根据部署指定不同的URL,例如qa vs生产vs本地开发机器。

这就是配置文件的用途。在ASP.NET中,它首先是应用程序实例的Web.Config。您可以使用AppSettings部分并按键添加URL,或者创建自己的配置部分(如果您愿意),但我认为在您的情况下,这样做太过分了

<configuration>
  <appSettings>
    <add key="WebApiEndpointURL" value="http://localhost/WebApi/" />
Dim sURL as String = _
  System.Configuration.ConfigurationManager.AppSettings("WebApiEndpointURL")