【问题标题】:Use asp.net mvc within a web api project在 web api 项目中使用 asp.net mvc
【发布时间】:2015-11-19 09:53:40
【问题描述】:

我找到的所有链接都在谈论在 mvc 项目中使用 Web API。

但我想要相反。

我找不到有关该场景以及如何将 mvc 集成到 Web api 项目的任何信息。

有可能吗?

【问题讨论】:

  • 你能解释一下为什么要混合它们吗?也许您正在努力实现的实际示例会有所帮助?
  • 假设您的 Web API 托管在 IIS 中,您绝对可以将它们放在同一个项目中。即使您是自托管,您仍然可以。这可以通过谷歌搜索“web api mvc 相同项目”来回答。每个结果都谈到了如何做到这一点。
  • 虽然肯定有可能,但我想问的问题是:为什么?如果你能让它变得容易,你为什么要让自己变得困难。当您创建 MVC 应用程序时,Visual Studio 会为您做很多事情。如果您选择忽略这一点,则必须自己完成所有这些步骤(例如启动应用程序、配置路由、过滤器......)
  • @Amy 您是否阅读过您发布的链接的解决方案?我不这么认为。我将把它贴在这里:“...下面的文章为您提供了在 MVC 应用程序中逐步实现 ASP.NET Web API...”我没有询问在 MVC 应用程序中使用 Web API 的问题。我问我如何在 web api 项目中使用 MVC - 因为我们想使用 razor 处理简单的表单而不是做 SPA ......这是开销。
  • @hbulens 我无法创建 MVC 项目,因为我们已经有旧版 Web api。

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

我从一个使用 Web API 的空 ASP.Net 项目设置开始这些说明。

  1. 安装Microsoft.AspNet.Mvc Nuget 包。

  2. Set up MVC routes 和 global.asax 中的任何其他 MVC 配置,您可以在其中配置 Web API。如果愿意,您可以在单独的类中进行此配置并从 global.asax 中调用它。

例子:

RouteTable.Routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
  1. 将 MVC 控制器添加到 controllers 文件夹。这应该是一个单独的文件夹,其中包含您的 Web API 控制器,并且不必称为 controllers

  2. 创建一个Views 文件夹。为了使这更容易,更省时,在一次性解决方案中创建一个 MVC 项目并将其 Views 文件夹复制过来。特别是,您要复制Views\Shared 文件夹中的所有文件,以及Views 文件夹中的所有.config 文件。没有这些,您的 MVC 视图将无法工作。

  3. 如果您为 #4 创建了一次性项目,请查看其 web.config,尤其是 <system.web> 设置。

如果你没有,这是我的一部分:

<system.web>
   <authentication mode="None" />
   <compilation debug="true" targetFramework="4.5.2" />
   <httpRuntime targetFramework="4.5.2" />
</system.web>

您现在应该让 MVC 在 ASP.Net 项目中与 Web API 一起工作。

如需更多组织,您可以创建MVC Area。开始时您不需要区域,如果您稍后决定添加区域,则可以轻松地将现有 MVC 代码移动到一个或多个新区域中。

如需更多信息,请阅读this blog post by David Paquette。是的,这篇文章是关于 Web 表单的,但说明和概念是一致的。另外,Web Forms 只是一个带有 Web Forms 的 ASP.Net 项目,就像 Web API 一样。

【讨论】:

    【解决方案2】:

    这很简单,我在多个站点上使用它 - 创建一个新区域(我使用“UI”)并将其视为一个简单的 MVC 站点。

    您必须按照以下方式修复默认路由:Multiple types were found that match the controller named 'Home'

    【讨论】:

    • 不需要创建区域。
    • 当然不是必需的,但很有用,因为它允许您在 WebAPI 和 UI 中拥有具有分离功能的重复控制器。
    猜你喜欢
    • 2016-07-06
    • 2018-06-09
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多