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

标签 asp.net-mvc asp.net-web-api asp.net-mvc-5 asp.net-mvc-routing

假设我有两个 Web 项目,一个 ASP.NET MVC 和另一个 ASP.NET WebAPI。

它们在不同的项目中并在不同的主机(www.whatever.com 和 data.whatever.com)中运行。

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

哪种方式更优雅?我想避免的是对 URL 进行硬编码。也许是共享路由集合并使用一些技巧来生成提供主机名的完整 url。

最佳答案

这是不可能的。虽然您可以执行一些动态程序集加载来创建一个使用另一个项目的路由的 UrlHelper,但这很重要并且需要项目之间的硬依赖性,这在某种程度上否定了将它们分开的目的首先进入不同的项目。就其值(value)而言,如果您的 Web Api Controller 与 MVC Controller 驻留在同一项目中(这完全没问题),那么您可以像任何其他操作一样获取 Web Api 端点的 URL。

即使您确实通过在其他程序集中动态加载创建了 UrlHelper仍然 只会为您提供路径。您的 Web Api 项目的实际域和应用程序根目录不可能在 Web Api 项目本身之外获得。

虽然我完全同意您不对 Web Api 端点 URL 进行硬编码的愿望,但您真的别无选择。您可以通过将对 Web Api 的调用包装在某个类中来稍微缓解这种情况,这样至少可以将所有 URL 保存在一个地方。您也可以考虑像 Refit 这样的东西,这将允许您创建一个或多个表示您的 Web Api 的接口(interface),允许您抽象化 URL 和所有用于访问它的基础结构,并在一次失败中处理响应。

关于asp.net-mvc - 在项目之间共享 URL 的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568008/

相关文章:

jquery - 在 Jquery 模式弹出窗口中呈现局部 View

asp.net-mvc - 如何将 Asp.Net Identity 中的大 cookie 分成较小的 cookie 以允许许多声明?

asp.net-mvc - ASP.NET DisplayFormat dd/MM/yyyy 不起作用

c# - MVC中的属性和过滤器有什么区别

angularjs - 如何让 StructureMap 与 AngularJs/MVC5 和 WebApi2 Web 项目一起工作

具有相同 Action 名称和不同参数的 C# MVC 路由

Azure 中的 ASP.NET Core 2.0 URL 重写

c# - 如何绑定(bind)来自 httpClient.PostAsJsonAsync 的 JSON 响应

angularjs - 将 IEnumerable 从 web api Controller 发送到 angular js

asp.net-mvc-5 - UserManager 在 ASPNET Identity 2 应用程序中始终为空