(转)非常好的WebApi入门文章

2023-11-07

如何在VS中创建基于.NET的后端应用程序,该应用程序使用C#语言从Web API中提取。让我们开始吧!

为服务器后端逻辑选择语言的问题是几乎每个开发人员最重要的问题之一,特别是对于初学者。目前已经有很多不同的语言:Java,.NET(C#,VD),Ruby,Python,Perl,JavaScript(Node.js),Go,C ++。

除了这些语言的语法特征外,还有许多其他问题/问题,例如扩展的可能性,不同类型数据库的使用,高学习曲线,容错要求,大量数据等等。上。

哪种语言最受欢迎?你应该使用哪一个?也许有人会推荐PHP,它具有丰富的功能和较低的学习曲线。然而,事实仍然是现在最常用的语言是Java和.NET。

本教程介绍如何使用C#(ASP.NET)构建自己的Web服务器(Web API)。重要的是要注意,要托管您的服务器,您将需要基于Windows的托管。

先决条件

我想我们可以开始了。首先,当我们使用C#时,您需要使用Microsoft Visual Studio(您可以在Microsoft官方网站上获取它)。

此外,您还需要启用IIS(Internet信息服务)。在Windows中启用它很容易:

在Windows 10中打开“控制面板”,单击“程序”,然后找到“程序和功能”部分,并单击“打开或关闭Windows功能”。在这里,找到Internet信息服务。单击其前面的+图标以展开其下的所有可用选项。您可以找到FTP服务器,Web管理工具和万维网服务。现在启用Web管理工具。单击“确定”,将添加所选功能(或多个功能)并将其应用于Windows。

第1步:创建一个新项目

打开Microsoft Visual Studio并创建一个新项目(文件 - >新建 - >项目)。选择“已安装”模板,选择“Visual C#”,然后选择“Web”。在可用模板列表中,选择“ASP.NET Web应用程序(.NET Framework)”。给你的项目命名(对于我的演示,我把“webapi”),然后单击OK。

 

在下一个模态对话框中,您可以选择任何合适的模板。让我们选择Web API,这样它就会为项目准备所有基本的初始文件。单击确定。

完成。现在,您可以在解决方案资源管理器中浏览生成的文件夹和文件 有应用程序配置,帮助页面数据,一些控制器,字体,CSS和JS文件。

 

路由表

默认情况下,服务器使用位于App_Start / WebApiConfig.cs中的路由表。

注意routeTemplate: "api/{controller}/{id}",它解释了API路由。

现在,让我们做一个基本的例子。在本教程中,我们将为用户准备一个API,这是每个系统的一个非常通用的实体/对象。

添加用户模型

该模型代表用户,因此我们将包括各种字段,如ID,姓名,电子邮件,电话和角色。

在Solution Explorer中,右键单击Models文件夹,选择Add,然后选择Class。然后提供一个类名:User。模型类已准备就绪。

 

现在我们只添加我们决定添加的所有字段:

    public class User
    {
        public int id { get; set; }
        public string name { get; set; }
        public string email { get; set; }
        public string phone { get; set; }
        public int role { get; set; }
    }

  

添加用户控制器

在Web API中,控制器是处理所有HTTP请求的对象。在解决方案资源管理器中,右键单击“控制器”。选择Add,然后选择Controller。

 

在给定的对话框中,选择具有读/写操作的Web API 2 Controller。将控制器命名为UsersController。它将为控制器准备所有适当的CRUD操作。

在本文中,我使用虚拟用户列表准备了一个基本示例:

 public class UserController : ApiController
    {
        private User[] users = new User[] { new User { id = 1, name = "Haleemah Redfern", email = "email1@mail.com", phone = "01111111", role = 1 }, new User { id = 2, name = "Aya Bostock", email = "email2@mail.com", phone = "01111111", role = 1 }, new User { id = 3, name = "Sohail Perez", email = "email3@mail.com", phone = "01111111", role = 1 }, new User { id = 4, name = "Merryn Peck", email = "email4@mail.com", phone = "01111111", role = 2 }, new User { id = 5, name = "Cairon Reynolds", email = "email5@mail.com", phone = "01111111", role = 3 } };//
        // GET: api/User
        public IEnumerable<User> Get()
        {
            return users;
        }
        
        // GET: api/User/5
        public User Get(int id)
        {
            User a=users.ToList().Find(o => o.id == id);
            return a;
        }

        // POST: api/User
        public void Post([FromBody]string value)
        {
        }

        // PUT: api/User/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE: api/User/5
        public void Delete(int id)
        {
        }
    }

 

 

第2步:部署

现在,您可以构建解决方案(在Visual Studio中按Ctrl + Shift + B)。一旦构建成功,您就可以运行它。单击F5,它将在您的浏览器中自动在您的本地主机的可用端口(例如http:// localhost:61024 /)中打开。最有可能的是,您不希望它始终在Visual Studio中运行,因此最好将其保留为服务。

在这种情况下,我们可以使用IIS(Internet信息服务)将其部署到本地专用服务器。这很简单。

首先,打开IIS,在“站点”下面的左侧 - 添加新网站(从右侧面板或右键单击“站点”)。请输入以下详细信息:站点名称,“webapi.localhost.net”; 物理路径,“C:\ projects \ webapi”(解决方案所在的位置); 绑定 - http或https; 主机名是相同的,即“webapi.localhost.net”。单击确定。

IIS应该在webapi.localhost.net上运行Web API服务。

现在,如果您尝试在浏览器中打开webapi.localhost.net,它将无法打开我们创建的结果。这是因为浏览器尝试将此地址(webapi.localhost.net)解析为全局域。为了将此域名映射到本地服务器,我们需要修改本地主机文件。在Windows(v10)上,hosts文件存在于C:\ Windows \ system32 \ drivers \ etc文件夹中。该文件没有自己的扩展名,它是“主机”文件。

将其复制到另一个位置并在编辑器中打开它

您需要将以下内容添加到此文件的末尾:

#Web API主机127 .0.0.1 webapi.localhost.net

现在,您需要将修改后的文件放回C:\ Windows \ system32 \ drivers \ etc文件夹中。由于此文件夹默认受Windows保护,因此您将收到拒绝访问警告消息。因此,您需要复制“以管理员身份”文件。

文件更新后,webapi.localhost.net应从您的localhost(C:\ projects \ webapi)加载。

测试API

是时候测试我们为Web服务器创建的API方法了: api/users and api/users/{id}。 在浏览器中打开http://webapi.localhost.net/api/users。你应该得到以下输出:

在我们创建可从IDE外部访问的外部API时,我们需要从另一个页面测试我们的API。最简单的方法是通过开发工具栏(存在于任何现代浏览器中)。通常在按F12时会激活它。转到“控制台”标签。下面我准备了两个小例子,你可以用来测试API

如果jQuery可用,您可以使用:

$.ajax({type: "GET",url: 'http://webapi.localhost.net/api/users',success: (data) => {console.log(data);}});

否则,使用本机JavaScript,您可以使用以下代码:

var xhr = new XMLHttpRequest();xhr.open('GET', 'https://webapi.localhost.net/api/users');xhr.onload = function() {console.log(xhr.response);};xhr.send();

您很可能会收到以下错误:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

原因是常规网页可以使用该 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制。扩展不是那么有限。扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限即可。

跨源资源共享(CORS)是一种机制,它使用其他HTTP标头告诉浏览器让在一个源(域)上运行的Web应用程序有权从不同来源的服务器访问所选资源。

调整跨源资源共享(CORS)

为了解决这个问题,我们需要在我们的解决方案中启用CORS。在Visual Studio中,打开包管理控制台(可在屏幕底部,错误列表和输出之间)。

运行以下命令:

Install-Package Microsoft.AspNet.WebApi.Cors

这将安装WebApi.Cors参考。然后打开“App_Start \ WebApiConfig.cs”文件。加config.EnableCors();之前config.MapHttpAttributeRoutes();

然后返回我们的UsersController.cs并[EnableCors(origins: "*", headers: "*", methods: "*")]在类定义之前添加。

最后 - 再次重建项目。然后尝试再次测试API; 现在它应该工作。

转载于:https://www.cnblogs.com/taofengfeng/p/11060725.html

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

(转)非常好的WebApi入门文章 的相关文章

  • AWS Lambda 和 S3 - 上传的 pdf 文件为空/损坏

    我有一个 Spring 应用程序 在 AWS Lambda 上运行 它获取文件并将其上传到 AWS S3 Spring控制器发送一个MultipartFile到我的方法 使用 Amazon API Gateway 将其上传到 AWS S3
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • 如何在 JUnit 中缩短(或隐藏)包名称?

    我在 JUnit 中有很长的包名称 这使得很难看到正在运行哪些测试 不幸的是 使用 Eclipse 的 缩写包名称 不起作用 有没有办法隐藏或者最好缩短它们 None
  • 无法实例化类对象的类型 (Java)

    这是我收到错误的代码 在 new 之后的第二个 Killer 处 String classes new String 5 kills 0 Brian Moser kills 1 James Doakes kills 2 Lila Tourn
  • 为什么 writeObject 抛出 java.io.NotSerializedException 以及如何修复它?

    我有这个异常 我不明白为什么会抛出它 或者我应该如何处理它 try os writeObject element catch IOException e e printStackTrace Where element is a Transf
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • Hibernate - 如何通过 Hibernate 将 java.net.URL 存储到数据库中

    我有一块田地URL countryURL in a Country班级 我想将其数据存储到COUNTRY通过 Hibernate 将表存储在数据库中 哪个休眠type我应该在休眠映射文件中使用
  • 需要使用自定义类而不是在 Web 服务中生成(通过 wsimport)

    您能帮忙解决以下问题吗 当生成 WS 客户端代码 使用 wsimport ant 任务 时 所有类都会在与 Web 服务相同的包 例如 helloservice endpoint 中自动生成 例如如果我的网络服务有方法 公共节点 getNo
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • 有没有办法让 SonarQube 只警告不完整的 Switch 语句?

    使用 Java SonarQube 抱怨枚举值上的 switch 语句没有default case 给出的推理是 最终默认条款的要求是防御性编程 该条款应采取适当的行动 或包含 关于为什么不采取行动的适当评论 当开关盖上时 枚举的所有当前值
  • 编写专门用于类及其子类的函数模板

    我正在尝试编写一个函数模板 一个版本应该用于不满足另一版本标准的所有类型 当参数是给定类的基类或该类本身时 应使用另一个版本 我尝试过超载Base 但是当类派生自Base 他们使用通用的 而不是特定的 我也尝试过这种 SFINAE 方法 s
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再

随机推荐

  • 给定一个十进制正整数 n(0 < n < 1000000000),每个数位上数字均不为 0。n 的位数为 m。现在从 m位中删除 k位 (0<k < m),求生成的新整数最小为多少?例如: n = 9

    题目描述 给定一个十进制正整数 n 0 lt n lt 1000000000 每个数位上数字均不为 0 n 的位数为 m 现在从 m位中删除 k位 0
  • 如何搭建Tesla Occupancy Network的一个基线?

    作者 我叫斯蒂芬 编辑 汽车人 原文链接 https zhuanlan zhihu com p 575058907 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 BEV感知 技术交流群 原文链
  • 前端音波绘制

    好久不曾写博客了 忙忙碌碌大半年 毕业就工作果然还是有点意思 本人贼懒 但是只要是研究了点东西的话 还是分享一下供其他感兴趣的小伙伴前车之鉴吧 回归正题 用过手机百度音乐的朋友们 这里算打个广告吧 估计会注意音乐播放后左下角那个音波绘制的看
  • 基于yolov3源码的训练过程

    基于yolov3源码的训练过程 在yolo官网上使用一下指令可以对模型的数据集进行训练 darknet detector train cfg voc data cfg yolov3 voc cfg darknet53 conv 74 但是训
  • fatfs移植和使用(在SPI_FLASH上建立文件系统)

    文件系统对于嵌入式系统的重要性是不言而喻的 有了文件系统管理数据和外设变得方便许多 同时简化了应用的开发 今天我们来以在SPI FLASH上建立文件系统为例 看看FATFS文件系统怎么移植和使用 需要准备的材料有 1 FATFS文件系统源码
  • VC项目中文件类型说明

    APS 存放二进制资源的中间文件 VC把当前资源文件转换成二进制格式 并存放在APS文件中 以加快资源装载速度 资源辅助文件 BMP 位图资源文件 BSC 浏览信息文件 由浏览信息维护工具 BSCMAKE 从原始浏览信息文件 SBR 中生成
  • Elasticsearch与Clickhouse数据存储对比

    1 背景 京喜达技术部在社区团购场景下采用JDQ Flink Elasticsearch架构来打造实时数据报表 随着业务的发展Elasticsearch开始暴露出一些弊端 不适合大批量的数据查询 高频次分页导出导致宕机 存储成本较高 Ela
  • 从键盘输入一个字符,若为小写,则改为大写再输出

    include
  • React学习笔记

    一 基础 1 概念 React是用于构建用户界面的JavaScript库 只关注视 2 特点 声明式编程 React 使创建交互式 UI 当数据变动时 React 能高效更新并渲染合适的组件 组件化 构建管理自身状态的封装组件 然后对其组合
  • 华为技术支持面试

    一面 技术面 不同面试官 面试内容差别较大 班里有些同学随便聊4 5分钟就通过了 我 大概面了15分钟 首先是三分钟的中文自我介绍 然后针对简历提问 被问到毕业课题 而且问得比较详细 叫我画出整个方案的框架图 I2C LCD的时序图 项目工
  • Linux驱动

    HC SR04超声波模块 工作原理参考 超声波模块 star air的博客 CSDN博客 超声波模块 https blog csdn net qq 41262681 article details 95940707 使用超声波测距的操作步骤
  • java获取post数据_java通过HttpServletRequest获取post请求中的body内容的方法

    在java web应用中 我们如何获取post请求body中的内容 以及需要注意的问题 通常利用request获取参数可以直接通过req getParameter name 的方式获取url上面或者ajax data提交上来的参数 但是bo
  • centos7.9 安装使用kafka

    安装kafka之前需要安装java8 以上版本 yum install java 1 8 0 openjdk x86 64 yum install java 1 8 0 openjdk devel x86 64 安装kafka 软件下载地址
  • 64GU盘装机后变成32G,且电脑无法识别问题解决

    问题描述 借助64G的闪迪U盘给电脑装了系统后 直接拔出后 忘记点弹出了 然后这个电脑的此电脑中就找不到这个U盘 别的电脑可以 但是在电脑右下角可以看到 64G变成32G这个问题网上解决办法很多 我是下载了DiskGenius然后格式化就好
  • scribe日志收集

    https www xiaomastack com 2014 11 11 scribe nginx php 日志管理 4 用scribe收集nginx和php日志 By 小马 十一月 11 2014 Scribe 日志管理 Leave a
  • win7 和 linux双系统安装教程,win7和centos7双系统完美安装攻略

    笔记本 台式机配置都太差了 装Vbox VM Hyper v都不能顺畅运行 太卡 于是想到开启台式机Wind7 CentOS7双系统运行模式 几经周折整理出以下安装过程 准备工作 准备辅助工具 所用工具包整理好 https pan baid
  • Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题

    当装好python3导入ssl模块时报以下错误 ModuleNotFoundError No module named ssl import ssl if we can t import it let the error propagate
  • 【标准解读】Autosar 复杂驱动(CDD)开发--看这一篇就够了

    系列文章目录 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一 Introduction to CDD 二 CDD设计建议 CDD开发需要注意的事项 2 1 文档 2 2行为和接口描述 2
  • Netty线程模型

    说明 1 Netty抽象出两组线程池 BossGroup专门负责接收客户端的链接 WorkerGroup专门负责网络的读写 2 BossGroup和WorkerGroup类型都是NioEventLooGroup 3 NioEventLoog
  • (转)非常好的WebApi入门文章

    如何在VS中创建基于 NET的后端应用程序 该应用程序使用C 语言从Web API中提取 让我们开始吧 为服务器后端逻辑选择语言的问题是几乎每个开发人员最重要的问题之一 特别是对于初学者 目前已经有很多不同的语言 Java NET C VD