同一解决方案中的 MVC 和 Web Api 项目

Posted

技术标签:

【中文标题】同一解决方案中的 MVC 和 Web Api 项目【英文标题】:MVC & Web Api projects within same Solution 【发布时间】:2013-09-06 11:47:43 【问题描述】:

我有一个位于 N 层应用程序之上的 MVC 4 项目。我现在需要能够以编程方式使用应用程序。我在 MVC 项目旁边的同一解决方案中创建了一个新的 Web API 项目,同样位于 N 层应用程序之上。

但我不清楚这一切是如何工作的,因为 MVC 层是启动项目:它设置了我的 DI、自动映射器等,并且是我部署到服务器的项目。

那么这一切应该如何设置呢?我可以设置我的 MVC 项目以将所有 /api 请求路由到新的 Web API 项目吗?还是需要单独部署Web API项目?

我不想做任何非常规的事情,所以如果有更常见的设置方法,请指出正确的方向。

谢谢。

【问题讨论】:

为什么要编辑这个?你比我原来的帖子有什么改进?实际上,您所做的只是突出显示不需要突出显示的各个部分! 【参考方案1】:

WebApi 是来自 Microsoft 的替代面向服务的应用程序,就像 WCF 一样。但是 WCF 使用 SOAP 协议,而 WebAPI 使用 HTTP 协议进行通信。

因此,如果您使用 WCF 为您的 MVC 应用程序提供服务,您将单独托管该 wcf 服务并通过 MVC 应用程序使用其服务,这与您必须单独托管您的 WebAPI 项目并为您的 Web 应用程序提供服务的方式完全相同( MVC)。

出于某些原因,如果您希望它们(MVC 和 WebAPI)在同一个项目中使用,请遵循本文中的规则。

http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx

【讨论】:

那么 N-Tier 应用程序实际上应该包装在 MVC 演示项目使用的 Web Api 中吗?这不会导致 MVC 项目变慢吗,因为它需要为其数据调用 Web 服务? 另外,您是否会将 MVC 项目完全移至单独的解决方案中? 是的,您必须分别创建/开发您的 webapi 项目和 MVC 项目并分别托管它们,其设计良好且具有高度可扩展性。 我想说创建两个解决方案,一个用于 MVC Web 应用程序,其中包含与 Web 应用程序相关的所有子项目,另一个用于 Web api(服务应用程序)及其相关项目,例如从数据库获取数据或某些东西并进行处理并将它们作为服务公开给 Web 应用程序。现在,将它们分别托管在 IIS 上。 这听起来确实是一个不错的方法,因为 MVC 项目随后变成了该服务的另一个消费者。但它是否会减慢 MVC 网站的响应速度,因为它必须等待从 Web Api 通过网络返回的数据?【参考方案2】:

我昨天也做了同样的事情。我在同一个 MVC 4 项目中有常规控制器和 ApiControllers。

您需要在 Global Asax for WebApi 中添加路由:

WebApiConfig.Register(GlobalConfiguration.Configuration);

看看 WebApiConfig :

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

不要忘记添加用于 WebApi 的 Nuget 包(如果您还没有)。就我而言,我没有它们,因为我的项目最初是 MVC 3,后来升级了。

【讨论】:

您的初始应用程序仍然是 MVCapplication 类型吗?路由不会有任何冲突吗? @IngóVals 是 MVC 应用程序。完全没有问题。【参考方案3】:

您只需将路由和 API 控制器添加到您现有的 MVC 站点,它们都将在 site/api/ 下可用

【讨论】:

我曾考虑将两者都放在一个项目中,但这似乎使项目过于复杂。将这两件事分开会很棒。

以上是关于同一解决方案中的 MVC 和 Web Api 项目的主要内容,如果未能解决你的问题,请参考以下文章

单独项目中的 MVC 解决方案中的 Web API

集成 Web API 和 .net MVC 项目 (C#)

Web API 身份验证(无 asp.net 身份)

如何使用标题中的两个参数和正文中的第二个参数从另一个 MVC 项目调用 Web API

mvc和api项目的路由冲突

了解 ASP.NET(MVC、Web API)中的令牌生成/验证