ChatGPT解决这个技术问题 Extra ChatGPT

如何将 Web API 添加到现有的 ASP.NET MVC 4 Web 应用程序项目?

我希望将 ASP.NET Web API 添加到在 Visual Studio 2012 中开发的 ASP.NET MVC 4 Web 应用程序项目。我必须执行哪些步骤才能将功能正常的 Web API 添加到项目中?我知道我需要一个从 ApiController 派生的控制器,但这就是我所知道的。

如果我需要提供更多详细信息,请告诉我。


a
aknuds1

我需要执行的步骤是:

添加对 System.Web.Http.WebHost 的引用。添加 App_Start\WebApiConfig.cs(参见下面的代码片段)。在 Global.asax.cs 中导入命名空间 System.Web.Http。在注册默认 Web 应用程序路由之前,在 MvcApplication.Application_Start()(在文件 Global.asax.cs 中)中调用 WebApiConfig.Register(GlobalConfiguration.Configuration),否则会优先。添加从 System.Web.Http.ApiController 派生的控制器。

然后我可以从 the tutorial(您的第一个 ASP.NET Web API)中学到足够的知识来定义我的 API 控制器。

App_Start\WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

全球.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

2015 年 16 月 10 日更新:

Word 有它,必须安装 NuGet 包 Microsoft.AspNet.WebApi 才能使上述工作。


这真的很有帮助。我还必须添加对 System.Net.Http 的引用,但除此之外,它就像一个魅力!
我也将一个项目从 MVC3 升级到 4,还需要添加对 System.Web.Http 的引用。
您现在可以使用 nuget,并随时了解发生的任何更改! nuget.org/packages/Microsoft.AspNet.WebApi
直到我将我的 web api 注册更改为: GlobalConfiguration.Configure(WebApiConfig.Register);
@LuisGouveia 我想为时已晚,但如果这是我所拥有的,其他人可能会更快地解决它。 GlobalConfiguration.Configure(WebApiConfig.Register);在 Global.asax 之前 RouteConfig.RegisterRoutes(RouteTable.Routes);
i
itzmebibin

更新 11/22/2013 - 这是最新的 WebApi 包:

Install-Package Microsoft.AspNet.WebApi

原始答案(这是一个较旧的 WebApi 包)

Install-Package AspNetWebApi

更多details


截至 2013 年,这是一个旧版软件包,您现在需要 Install-Package Microsoft.AspNet.WebApi。请参阅nuget.org/packages/Microsoft.AspNet.WebApi
H
Hakan Fıstık

在我的 MVC 5 项目中添加 WebAPI。

打开 NuGet 包管理器控制台并运行 PM> Install-Package Microsoft.AspNet.WebApi 添加对 System.Web.Routing、System.Web.Net 和 System.Net.Http dll 的引用(如果还没有的话)右键单击控制器文件夹 > 添加新项目> web > 添加 Web API 控制器 Web.config 将通过 VS Add Application_Start 方法进行相应修改,如果没有保护 void Application_Start() { //这应该是此方法中的第 1 行 GlobalConfiguration.Configure(WebApiConfig.Register); } 添加以下类(我在 global.asax.cs 文件中添加) public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 相应地修改 web api 方法 namespace { public class VSController : ApiController { // GET api/ : url to use => api/vs public string Get() { return "Hi from web api 控制器"; } // GET api//5 : 使用的 url => api/vs/5 public string Get(int id) { return (id + 1).ToString(); } } } 重新构建和测试 构建一个简单的 html 页面 ....


正如@kheya 所提到的,造成差异的一点是将 WebApiconfig.Register 放在第一行
我想补充一下,您的 api 控制器名称必须以 Controller 结尾,例如 CarController(不仅仅是 Car)!!!很多人忘记了它并收到错误消息“找不到与名为 {0}' 的控制器匹配的类型”
为了更有效地使用这个不错的答案,您可以忽略第 4、8 和 9 步。(它们不是那么重要)如果您交换第 5 步和第 6 步的顺序,它们会更有意义(最好先创建一个类使用它,而不是使用类然后创建它)
我们究竟在哪里添加对 System.Web.Routing、System.Web.Net 和 System.Net.Http 的引用?
T
Teoman shipahi

只要在控制器文件夹下添加“WebApi 控制器”,Visual Studio 就会自动处理依赖关系;

Visual Studio 已将 ASP.NET Web API 2 的全套依赖项添加到项目“MyTestProject”。项目中的 Global.asax.cs 文件可能需要进行其他更改才能启用 ASP.NET Web API。添加以下命名空间引用: using System.Web.Http;使用 System.Web.Routing;如果代码尚未定义 Application_Start 方法,请添加以下方法: protected void Application_Start() { } 将以下行添加到 Application_Start 方法的开头: GlobalConfiguration.Configure(WebApiConfig.Register);


这是迄今为止实现这一目标的最简单方法。
在这里不起作用。 1. Nuget: Install-Package Microsoft.AspNet.WebApi 2. 添加新项目“Web API Controller Class (v2.1)”。结果:添加 api 控制器但不更改 Application_Start。与欧文。
当您拥有 vs2015 - update 3 并添加 web api 2 控制器时,这是正确的答案。
它在 2017 年做到了,但我不得不升级我的 WebApi 程序集。我还必须手动创建 WebApiConfig 类,docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/…
c
cuongle

您可以从 nuget 安装,如下图所示:

https://i.stack.imgur.com/5JbUu.png

或者,在包管理器控制台上运行以下命令行:

Install-Package Microsoft.AspNet.WebApi

那么,除了添加控制器,我还需要做什么呢?这就是我首先发布这个问题的原因,本教程并没有真正说明,因为它假设一个 Web API 项目。我添加了一个 API 控制器,但它没有被路由到。
本教程对于将 Web API 添加到现有项目并没有太大帮助,因此我从 Web API 项目中找到了答案,如我的回答中所述。
我同意,如果您使用 Web App 项目模板,似乎已经安装了这个管道。
@cuongle:web api 2.2 版将与 mvc 4 一起安装?它支持 MVC 4 吗?
C
Community

在开始合并 MVC 和 Web API 项目之前,我建议您阅读 cons and pros 以将它们分开为不同的项目。一件非常重要的事情(我自己的)是身份验证系统,这是完全不同的。

如果您需要在 MVC 和 Web API 上使用经过身份验证的请求,您需要记住 Web API 是 RESTful(不需要保持会话、简单的 HTTP 请求等),但 MVC 不是。

要查看实现的差异,只需在 Visual Studio 2013 中从模板创建 2 个不同的项目:一个用于 MVC,一个用于 Web API(不要忘记在创建过程中打开“个人身份验证”)。你会在 AuthencationControllers 中看到很多不同。

所以,请注意。


H
Hakan Fıstık

注意:这只是上面 this answer 的缩写

打开 NuGet 包管理器控制台并运行 PM> Install-Package Microsoft.AspNet.WebApi 添加对 System.Web.Routing、System.Web.Net 和 System.Net.Http dll 的引用(如果还没有) 添加以下类 public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 添加 Application_Start 方法,如果还没有(在 global.asax.cs 文件中) protected void Application_Start() { //这应该是此方法中的第 1 行 GlobalConfiguration.Configure(WebApiConfig.Register); } 右键单击控制器文件夹 > 添加新项目 > web > 添加 Web API 控制器命名空间 { public class VSController : ApiController { // GET api/ : url to use => api/vs public string Get() { return "Hi from web api controller"; } } }


我们究竟在哪里添加对 System.Web.Routing、System.Web.Net 和 System.Net.Http 的引用?
从“添加引用”对话框中,打开该对话框并搜索这些程序集的名称,很有可能它们已经被添加了。 (但只是为了确保)
Application_Start 方法是否应该是 Global.asax.cs 中全局类的一部分?
是的,我更新了我的答案以证明你的笔记
@HakamFostok 这对我有帮助。谢谢!
H
Hakan Fıstık

上述解决方案完美运行。我更喜欢在选择项目模板时选择 Web API 选项,如下图所示

注意:该解决方案适用于 Visual Studio 2013 或更高版本。最初的问题是在 2012 年提出的,现在是 2016 年,因此添加了 Visual Studio 2013 或更高版本的解决方案。

https://i.stack.imgur.com/3vx1R.gif


如果您正在创建一个涉及 Web API 的项目,选择 Web API 选项会更容易。该选项将创建上述回复中提到的所有必需文件。
这里手头的问题是在 Visual Studio 2012 和 mvc 4 中。虽然你的解决方案很好,但你不能在 VS 2012 中那样做
这是一个很好的观点,我已经尝试了 VS 2013 的上述解决方案。感谢@netfed 指出。
大家好,我在我的 MVC 解决方案中使用了 API 元素,但默认情况下它尝试将解决方案作为 API 解决方案运行。但我希望它作为默认的 MVC 解决方案运行,然后如果您转到 API 位置等,运行 API .. 有没有其他人遇到过这个问题并且能够解决它?谢谢
“到现有的 ASP.NET MVC 4 Web 应用程序”
i
iDeveloper

我有同样的问题,解决方法很简单

右键单击从“管理 Sulotion 的 Nuget 包”中安装 Microsoft.ASP.NET.WebApi 的 solotion

繁荣就是这样;)