使用C#创建服务端Web API

前言

C# Web API 是一种基于 .NET 平台(包括但不限于.NET Framework 和 .NET Core)构建 HTTP 服务的框架,用于创建 RESTful Web 服务。REST(Representational State Transfer)是一种软件架构风格,它利用HTTP协议的特性(如GET、POST、PUT、DELETE等方法)来操作资源。

在 C# 中,ASP.NET Web API 提供了一种模式和工具集,使得开发者能够方便地设计和实现对外暴露的API接口,这些接口可以被各种客户端应用程序(如Web浏览器、移动应用、桌面应用或其他服务器端应用)通过HTTP请求来调用,进而获取或修改数据。

使用 ASP.NET Web API 的特点和优势包括:

(1)模块化与分离关注点:控制器(Controllers)负责处理HTTP请求,模型(Models)代表业务对象,视图模型(ViewModels)可以用来适配不同客户端的数据需求,以及路由机制(Routes)将URL映射到特定的操作。

(2)RESTful 架构支持:它鼓励开发人员遵循 REST 设计原则,提供资源导向的服务,允许客户端通过标准HTTP方法访问资源。

(3)跨平台兼容性:尤其是在 .NET Core 上,Web API 可以运行在Windows、Linux 和 macOS 等多种操作系统之上。

(4)内容协商与格式化器:Web API 自动处理不同客户端要求的数据格式,例如JSON、XML或其他自定义格式。

(5)安全性与认证授权:内置了对OAuth、JWT等多种安全策略的支持,以便实施灵活且安全的API访问控制。

(6)测试友好:由于其基于HTTP,Web API 容易进行单元测试和集成测试,并且可以配合Postman、Swagger等工具进行接口文档生成和测试。

(7)扩展性:Web API 具有高度可扩展性,可以通过中间件、过滤器等方式增强功能,适应复杂的企业级应用需求。

今天小编就将为大家介绍一下如何使用C#在葡萄城公司的企业级低代码平台——活字格进行接口扩展。

活字格中的Web API

在活字格中,支持使用C#或VB.Net语言实现,可以运行在服务端,浏览器可以通过HTTP请求的方式调用服务端提供的Web API。

环境准备

编译器:Visual Studio、Visual Studio Code、IntelliJ IDEA Rider etc…(选择自己喜欢的即可);

依赖环境:系统需要安装Dot Net 6.0运行环境(下载请戳);

使用语言:C#或VB.Net;

其他:C#基础知识及编程能力。

创建服务端Web API

1、打开编译器,这里使用的是IntelliJ IDEA Rider,选择Class Library(类库),Framework选择net6.0。如下图:

2、选择完成后,点击"Create"创建类库项目,一个新建的类库项目就创建完成了。

3、接下来因为创建的是活字格的Web API,所以我们需要添加活字格的类库引用,用于与活字格进行交互和编程扩展。在新建的项目中选择"Dependencies"右键选择"Reference"添加引用。

4、点击"Add From"从活字格的安装路径下引用"GrapeCity.Forguncy.ServerApi.dll"文件,这里需要注意的是:

  • 如果安装活字格服务端时,安装目录为默认目录,则此文件的路径为:C:\Program Files\ForguncyServer\Website\bin
  • 如果安装活字格服务端时,安装目录为自定义路径,则此文件的路径为"自定义路径\ForguncyServer\Website\bin"

5、添加成功后,右键项目,选择"Edit"——“Edit xxx.csproj”。

6、在打开的csproj文件中添加下面代码并保存:

<ItemGroup><FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

以上我们就完成了基本的准备工作,接下来为大家介绍Web API的编写和使用。

编写服务端Web API

为了说明清楚,这里列举一个示例,示例的功能为用Web API可以接收标准化JSON数据。

1、创建一个public class,使其从GrapeCity.Forguncy.ServerApi命名空间的ForguncyApi类继承。

2、当通过HTTP的GET或POST调用方法时,可以通过ServerApi的Context属性获取请求的详细信息。Context属性是Asp.net Core的HttpContext类型,通过Request属性可以获取HTTP请求的全部信息。我们的示例中使用的是POST方法,所以我们新建一个Task方法,并用"[Post]"注解。

3、接下来,我们就可以在方法中书写自己的逻辑了,这里我们的代码具体如下,为了让活字格命令可以直接接收数组JSON数据,逻辑为当请求我们这个Web API时,会先从请求地址上拿到要调用的服务端命令名称,把标准化的数组JSON数据包了一层,包成了参数为"data"新的一个JSON数据,这样调用的服务端命令就可以使用data参数接收数组JSON参数了。具体在活字格中的使用后面会介绍。

using System.Text;
using System.Text.Json;
using GrapeCity.Forguncy.ServerApi;namespace MyApiTest;public class RequestBodyHandler : ForguncyA
{[Post]public async Task ReceiveApiRequest(){var request = Context.Request;var serverCommandName = request.Query["serverCommandName"]; // 从URL中取参数if (request.ContentType != null && request.ContentType.Equals("application/json")){var sr = new StreamReader(request.Body);string content = await sr.ReadToEndAsync();var obj = new { data = content };string newContent = JsonSerializer.Serialize(obj).Replace("/r/n", "");using HttpClient httpClient = new HttpClient();var baseAddress = $"{request.Scheme}://{request.Host}{request.PathBase}/ServerCommand/{serverCommandName}";HttpContent httpContent = new StringContent(newContent, Encoding.UTF8, "application/json");HttpResponseMessage responseMessage = await httpClient.PostAsync(baseAddress, httpContent);if (responseMessage.IsSuccessStatusCode){await responseMessage.Content.ReadAsStringAsync();}else{throw new Exception($"Error: {responseMessage.StatusCode}");}}else{throw new HttpRequestException("ContentType error, please check request content!");}}
}

4、书写完成我们需要的逻辑后,右键项目点击"Build Selected Projects"进行项目Build打包。

5、完成Build打包后,在刚才我们新建类库项目的目录下,找到生成的dll文件。

6、打开活字格设计器,上传我们打包的dll文件到活字格工程中,可以看到,上传dll后,API列表中会显示Web API的请求地址。

7、接下来,回到我们的活字格设计器工程中,我们新建一个服务端命令,服务端命令的名称命名为"RedirectCommand",并设置一个参数值为"data",然后用返回命令将接收的数据保存到表里。注意:服务端命令需要设置为任何人可调用。

8、这里我们借助API调试工具向刚才我们创建的Web API发送一个请求,先将活字格工程本地运行起来,Web API的调用URL如下:

http://域名或主机名/应用程序名/类名/方法名

例如:http://www.xxx.com/CRM/customapi/sampleapi/addsampledata

我们运行的是本地服务,所以可以使用localhost进行测试,如下图:

9、发送请求,可以发现,活字格中已经将产生的数据接收到并保存到了数据表中。

以上,我们利用Web API对数据进行了“预处理”,转发给了活字格中的服务端命令中,在活字格服务端命令中就可以进一步处理这种数组JSON数据啦。

调试服务端Web API

编码当然离不开调试,当然了,Web API也不例外,接下来就为大家介绍调试的方式方法。

1、首先需要先运行上传了打包完成的Web API dll文件的活字格工程。

2、可以看到本地服务会有一个唯一端口号,回到我们的编译器中,选择"Run"——"Attach to Process"附加到进程。

3、搜索刚才活字格本地服务的端口号,点击附加到进程。

4、然后在代码左侧打断点即可。

5、当触发Web API的调用后,就可以看到代码已经可以进行调试了。

修改代码后再次调试

代码很难一次编写地完全正确,如果修改代码,需要执行以下步骤:

  1. 修改代码。
  2. 编译工程。
  3. 在活字格设计器中删除之前的dll文件。
  4. 上传新的dll文件。
  5. 运行活字格应用程序。
  6. 通过编译器的“调试->附加到进程”重新附加到ForguncyServerConsole.exe进程上。
  7. 打断点调试。
  8. 如果还需要修改代码回到第一步,直到修正所有问题。

最后附上完整的代码工程文件:https://gitee.com/GrapeCity/my-api-test

总结

以上就是使用C#创建活字格服务端Web API的全过程,如果您想了解更多信息,欢迎点击这里查看。

扩展链接:

如何使用 Blazor 框架在前端浏览器中导入/导出 Excel XLSX

简便实用:在 ASP.NET Core 中实现 PDF 的加载与显示

如何在.NET电子表格应用程序中创建流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端食堂技术周刊第 115 期:Rolldown 正式开源、马斯克宣布 xAI 本周将开源 Grok、如何使用 Copilot 完成 50% 的日常工作?

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;手打柠檬茶 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看…

“antd“: Unknown word.cSpell

你遇到的问题是 VS Code 的 Code Spell Checker 插件在检查拼写时&#xff0c;将 "antd" 标记为未知单词。"antd" 是 Ant Design 的缩写&#xff0c;是一个流行的 React UI 库&#xff0c;不是一个英语单词&#xff0c;所以 Spell Checker 会将其标记为错误…

SpringBoot 多环境的配置(附带有截图)

文章目录 概要整体配置流程配置详细说明技术细节小结 概要 多环境开发 在实际项目开发中&#xff0c;一般需要针对不同的运行环境&#xff0c;如开发环境、测试环境、生产环境等&#xff0c;每个运行环境的数据库等配置都不相同&#xff0c;每次发布测试、更新生产都需要手动…

2024蓝桥杯每日一题(时间日期)

一、第一题&#xff1a;日期差值 解题思路&#xff1a;模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …

代码学习记录16

随想录日记part16 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.11 主要内容&#xff1a;今天的主要内容是二叉树的第五部分&#xff0c;主要涉及最大二叉树&#xff1b;合并二叉树&#xff1b;二叉搜索树的搜索&#xff1b;验证二叉搜索树。 654.最大二叉…

sensitive-word 敏感词 违规文字检测

1、快速开始 - JDK1.7- Maven 3.x 2、Maven 引入 <!-- https://mvnrepository.com/artifact/com.github.houbb/sensitive-word --><dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version…

案例分析篇02:软件架构设计考点之特定领域软件架构、架构评估、架构视图(2024年软考高级系统架构设计师冲刺知识点总结)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

目录 往期精彩内容&#xff1a; 前言 1 二次分解与数据集制作 1.1 导入数据 1.2 VMD分解 1.3 样本熵 1.4 CEEMDAN分解 1.5 数据集制作 2 基于Pytorch的 CNN-LSTM 预测模型 2.1 定义CNN-LSTM预测模型 2.2 设置参数&#xff0c;训练模型 3 模型评估与可视化 3.1 结果…

北京市行政村边界shp数据/北京市乡镇边界/北京市土地利用分类数据

北京是一座有着三千多年历史的古都&#xff0c;在不同的朝代有着不同的称谓&#xff0c;大致算起来有二十多个别称。北京地势西北高、东南低。西部、北部和东北部三面环山&#xff0c;东南部是一片缓缓向渤海倾斜的平原。境内流经的主要河流有&#xff1a;永定河、潮白河、北运…

1.4 Word2Vec是如何工作的? Word2Vec与LDA 的区别和联系?

1.4 Word2Vec&#xff1a;词嵌入模型之一 场景描述 谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。 Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构&#xff0c;分别是CBOW(Continues Bag of Words)和Skip-gram。 知识点 Word2Vec,隐狄利克雷模型(LDA),…

ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?

与ChatGPT类似的国内网站&#xff0c;他们都能提供和ChatGPT相似的能力&#xff0c;而且可以在国内直接使用。 点击直达方式 百科GPT官网&#xff1a;baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例&#xff0c;由OpenAI开发。以下是ChatGPT的发展历史&#xff1…

【办公类-40-01】20240311 用Python将MP4转MP3提取音频 (家长会系列一)

作品展示&#xff1a; 背景需求&#xff1a; 马上就要家长会&#xff0c;我负责做会议前的照片滚动PPT&#xff0c;除了大量照片视频&#xff0c;还需要一个时间很长的背景音乐MP3 一、下载“歌曲串烧” 装一个IDM 下载三个“串烧音乐MP4”。 代码展示 家长会背景音乐: 歌曲串…

C语言——简易版扫雷

目录 前言 ​编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点&#xff1a; 游戏代码实现 框架&#xff08;test.c&#xff09; game函数&#xff08;test.c&#xff09; InitBoard初始化&#xff08;game.c&#xff09; Print打印棋盘&#xff08;g…

RNN实战

本主要是利用RNN做多分类任务&#xff0c;在熟悉RNN训练的过程中&#xff0c;我们可以理解 1&#xff09;超参数 batch_size和pad_size对训练过程的影响。 2&#xff09;文本处理过程中是如何将文本的文字表示转化为向量表示 3&#xff09;RNN梯度消失和序列长度的关系 4&#…

Bugku---web---source

1.题目描述 2.点开链接&#xff0c;查看源码&#xff0c;发现了一个长得很像flag的flag&#xff0c;拿去base64解码&#xff0c;发现不是flag 3.没办法只能在kali里面扫描一下目录 4.发现是.git源码泄露&#xff0c;在浏览器尝试访问/.git,发现点开文件并不能看到源码 5.在kali…

06多表查询

多表查询 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个 关联字段可能建立了外键&am…

【Hadoop大数据技术】——HDFS分布式文件系统(学习笔记)

&#x1f4d6; 前言&#xff1a;Hadoop的核心是HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;和MapReduce。其中&#xff0c;HDFS是解决海量大数据文件存储的问题&#xff0c;是目前应用最广泛的分布式文件系统。 目录 &#x…

稀碎从零算法笔记Day15-LeetCode:判断子序列

跑样例的时候LC炸了&#xff0c;以为今天回断更 题型&#xff1a;字符串、双指针 链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;此题建议结合样例理解&#xff09; 给定字符串 s 和 t &#xf…

冰蝎的原理与安装使用

冰蝎的原理与安装使用 1、冰蝎原理 1.1简介 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端&#xff0c;由于通信流量被加密&#xff0c;传统的WAF、IDS 设备难以检测&#xff0c;给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密&#x…

JVM 面试——G1和ZGC的区别

ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器ZGC的目标主要有4个 支持TB量级的堆。我们生产环境的硬盘还没有上TB呢&#xff0c;这应该可以满足未来十年内&#xff0c;所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor …