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

2023-12-19

假设您在创建新的 MVC (5) 项目时忘记勾选 Web API 复选框(将其添加到项目中),那么您需要做什么来添加 Web API 并使其正常工作?

有很多迁移问题,但似乎没有一个具有将 Web API 添加到 MVC 5 项目的完整且最新的步骤,并且它似乎与一些旧答案相比发生了变化。

将 Web API 添加到 MVC 4 https://stackoverflow.com/questions/11990036/how-to-add-web-api-to-an-existing-asp-net-mvc-4-web-application-project

添加 GlobalConfiguration.Configure(WebApiConfig.Register) MVC 4 https://stackoverflow.com/questions/20226715/globalconfiguration-configure-not-present-after-web-api-2-and-net-4-5-1-migra


更新 MVC 项目

Use Nuget获取最新的 Web API。

项目 - 右键 - 管理 Nuget 包 - 搜索 Web API(Microsoft ASP.NET Web API ...)并将其安装到您的 MVC 项目中。

那么你还需要得到Web API 路由上班。 从Microsoft 的配置 ASP.NET Web API 2 http://www.asp.net/web-api/overview/advanced/configuring-aspnet-web-api

将WebApiConfig.cs添加到App_Start/文件夹中

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

如果您有一个 MVC 项目,它将有全局.asax.cs,添加新路线。Global.asax.cs 路由的顺序至关重要。 https://stackoverflow.com/questions/22401403/add-web-api-to-an-existing-mvc-5-web-application请注意,有一些过时的示例使用WebApiConfig.Register

将此行添加到 Global.asax.cs: GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

WebAPI帮助

为了得到 (very) 有用的 WebAPI 帮助页面 http://www.asp.net/web-api/overview/creating-web-apis/creating-api-help-pages,安装WebAPI.HelpPage。 看http://channel9.msdn.com/Events/Build/2014/3-644 http://channel9.msdn.com/Events/Build/2014/3-644(约 42 分钟)了解它的作用。看起来很有帮助!

Nuget 控制台:Install-Package Microsoft.AspNet.WebApi.HelpPage

要验证 WebAPI 是否正常工作:

到控制器文件夹 -> 添加新项目 -> Web API 控制器类。

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

现在您可以像往常一样在 IE/FF/Chrome 中进行测试,或者在 JavaScript 控制台中进行非 get 测试。

(仅使用 URL 中的控制器,它将在新的 Web API 控制器中调用 GET() 操作,它会根据 REST 自动映射到方法/操作,例如 PUT/POST/GET/DELETE。您无需调用像 MVC 中那样通过操作来实现) 直接网址:

http://localhost:PORT/api/CONTROLLERNAME/

或者使用 jQuery 查询控制器。 运行项目,打开控制台(IE 中的 F12)并尝试运行 Ajax 查询。 (检查您的端口和控制器名称)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

旁注:在项目中组合 MVC 和 Web API 时需要考虑一些优缺点 https://stackoverflow.com/questions/12905566/web-api-in-mvc-solution-in-separate-project

WebAPI帮助验证: http://localhost:PORT/help

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将Web API添加到现有的ASP.NET MVC(5)Web应用程序项目中? 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET MVC,控制器可以改变提交的值吗?

    ASP NET MVC 中是否允许更改提交的值 HttpPost public ActionResult Create Person toCreate toCreate Lastname toCreate Lastname A return
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • 列出给定 Azure 帐户的订阅

    我正在尝试使用以下命令列出 Azure 帐户中的订阅azure python sdk 我已点击文档中的此链接 https learn microsoft com en us python api azure mgmt subscriptio
  • NHibernate 组件继承

    NHibernates 组件可以继承吗 快速谷歌只返回了一堆适当的结果 所有博客 并且所有内容都是前一段时间写的 所以想知道它是否可用 如果不是 你该如何处理 目前还不可能 如果需要继承 则必须映射一个实体
  • 在实体框架中绑定自定义属性

    我的 EF 模型中有一个员工实体 然后我向项目添加了一个类以添加自定义属性 public partial class Employee public string Name get return string Format 0 1 this
  • 如何缩小 IMG 周围的 DIV?

    向所有 CSS 大师提出一个简单的 有人可能会想 问题 我想缩小 DIVsnugly围绕 IMG IMG 是 600 x 800 我需要它小得多 所以我去 高度 100 width auto 并通过包装器 DIV 约束高度 但是 为了维持
  • 在 Android 项目中处理 AWS 凭证的正确方法是什么?

    我需要在我的 Android 应用程序中连接到 Amazon 的 SimpleDB 亚马逊提供的示例项目安卓软件开发工具包 http aws amazon com sdkforandroid 将凭证放置在名为 AwsCredentials
  • 如何动态更改 ElasticSearch 的同义词

    我的同义词存储在数据库中 当数据库中的同义词发生更改时 我想更新索引中可能因同义词更改而更改的任何值 我能想到的有两个部分 第一 找出要重新索引的文档 第二 弄清楚如何告诉 ElasticSearch 同义词已更改 我正在努力解决第二个问题
  • 在 C# 中用新音频覆盖 mp4/wmv 视频的音频内容

    我有一个视频剪辑和一个音频剪辑 我想将音频放在视频的一部分上 双方的起点一致 但视频稍长 我想最好用 C 来做到这一点 有人知道我该怎么做吗 我想批量处理大量短片 10 12 分钟的剪辑 因此需要将其写入代码中 谢谢您的帮助 egon 您的
  • 我可以从应用程序内启动系统 PIN 身份验证吗?

    是否可以在我的应用程序中创建身份验证 以使用设备锁定 PIN 码验证用户 是否有意图机制或类似机制提示用户输入 PIN 码 我见过DevicePolicyManager 但我无法想出 有什么结论吗 从Android 5 0开始 您可以使用K
  • Rails Devise CakePHP 的旧用户

    我最近让 Devise 开始工作 新用户登录 注册 注销等都很好 然而 老用户有一个问题 我已经得到了 401 未经授权的地步 在我看来 登录时创建的哈希值不正确 当然也没有正确匹配 我的用户模型 class User lt ActiveR
  • 使用 Maven 和 postgres-db 运行 liquibase 时出现问题

    我在 postgresql db 上运行 Maven 的 liquibase plugin 时遇到问题 当尝试从命令行运行 liquibase update 时 我收到错误消息 ERROR Failed to execute goal or
  • 代码签名错误:捆绑包格式无法识别、无效或不合适

    我正在开发 iOS 应用程序 Swift 语言 iOS8 Xcode 6 1 它在 iPad 上运行良好 然后我向项目添加了 资源 文件夹引用 之后我收到代码签名错误 Resource 文件夹包含一些 HTML 文件 我不确定此文件夹引用是
  • 为什么当我第一次在系统中运行 React js 项目时收到此错误消息?

    当我跑步时npm start 我收到此错误消息 来自 chokidar C 的错误 错误 EBUSY 资源繁忙或锁定 lstat C hiberfil sys 来自 chokidar C 的错误 错误 EBUSY 资源繁忙或锁定 lstat
  • Intellij:如何复制/粘贴文件以复制它?

    我似乎找不到办法做到这一点 我在某个文件夹中有一个名为 X 的文件 我想在同一目录中创建具有相同内容的 Y 我在eclipse中的做法是选择文件并 C P eclipse提示输入新名称 UPDATE 显然 只有当编译单元包含多个类型时才会出
  • 您如何看待 TFS 中版本的更改?

    我正在尝试从 VSS 迁移到 TFS 并且需要能够显示在两个版本之间签入了哪些文件 在 VSS 中 我们只需标记发布的代码并查看标签之间的历史记录 并生成报告以显示签入和评论 有没有办法用 TFS 获得类似的结果 或者显示两个变更集或标签之
  • ATLANTBH jmeter-components:JSON 路径断言

    我正在尝试使用执行 JSON 断言ATLANTBH https github com ATLANTBH jmeter componentsjmeter JSON 路径断言 但是 我似乎无法编写正确的表达式来从下面发布的 JSON 提要中获取
  • Android - 使用 Glide/Picasso 从网站 URL 加载缩略图

    我正在尝试使用 Glide 加载网络上一篇文章的缩略图 但它返回一个空字段 与其他示例不同 此 URL 不直接链接到 PNG JPG 等等 而是一个网站链接 我需要它加载 默认缩略图 ImageView 已正确设置并初始化 我曾分别尝试过使
  • jQuery 可拖放定位

    我正在使用 jquery UI 和 jQuerydraggable 我所有的draggables都使用jqueryclone助手并附加可拖动的 to 可丢弃的 这是我的代码 squeezePage droppable droppable t
  • 如何检查是否安装了 gem?

    我为 Sinatra 项目安装了 data mapper 好奇 为什么我这样做的时候会这样gem install brew I can which brew并获取其位置的路径 但不能用于 data mapper 这适用于某些宝石 但不适用于
  • 提供基于泛型类型集合的泛型键比较

    我已经创建了自己的InsertOrUpdate 一些类型的实现如下 public IEnumerable
  • 如何将Web API添加到现有的ASP.NET MVC(5)Web应用程序项目中?

    假设您在创建新的 MVC 5 项目时忘记勾选 Web API 复选框 将其添加到项目中 那么您需要做什么来添加 Web API 并使其正常工作 有很多迁移问题 但似乎没有一个具有将 Web API 添加到 MVC 5 项目的完整且最新的步骤