使用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电子表格应用程序中创建流程图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux中查看目录文件(ls)用法:

查看目录下的文件&#xff1a;ls&#xff08;list&#xff09; 作用 查看目录下的内容 格式 ls -参数 操作对象参数 参数功能-l以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。-d显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。-…

【机器学习】机器学习是什么?用在哪里?怎么用?

1.机器学习是什么&#xff1f; 机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;它是一种通过对数据进行训练和学习&#xff0c;让计算机系统从中获取知识并改善性能的方法。简而言之&#xff0c;机器学习使计算机具有从数据中学习并自动改…

信息系统项目管理师009:消费互联网(1信息化发展—1.3现代化创新发展—1.3.3 消费互联网)

文章目录 1.3.3 消费互联网1.基本属性2.应用新格局 1.3.3 消费互联网 消费互联网是以个人为用户&#xff0c;以日常生活为应用场景的应用形式&#xff0c;满足消费者在互联网中的消费需求而生的互联网类型。消费互联网以消费者为服务中心&#xff0c;针对个人用户提升消费过程的…

机器学习模型—支持向量机 (SVM)

机器学习模型—支持向量机 (SVM) 支持向量机 (SVM) 是一种强大的机器学习算法,用于线性或非线性分类、回归,甚至异常值检测任务。SVM 可用于各种任务,例如文本分类、图像分类、垃圾邮件检测、笔迹识别、基因表达分析、人脸检测和异常检测。SVM 在各种应用中具有适应性和高效…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台&#xff0c;支持文章管理、…

【Linux杂货铺】操作系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 冯诺依曼体系结构 &#x1f4c2; 拓展问题&#xff1a;程序为什么要被加载到内存&#xff1f; &#x1f4c2; 主机与主机的交互 &#x1f4c1; 操作系统的概念 &#x1f4c2; 作用 &#x1f4c2; 理解“管理” &#x…

Hadoop学习3:问题解决

文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败&#xff0c;或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…

YOLOv5独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv5 Backbone 改进结构图如下: 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡…

对于双列集合map的学习

双列集合 特点 1.双列集合一次需要存一对数据&#xff0c;分别是键和值。 2.键和值一一对应&#xff0c;键不能重复&#xff0c;值能重复。 3.键值这个整体我们称之为键值对或者键值对对象&#xff0c;在java中叫做Entry对象。 Map的常见API Map是双列集合的顶层接口&…

ChatGLM:基于ChatGLM-6B使用ptuning进行微调,实现类instruction的效果

由于业务需要&#xff0c;调研下怎么训练一个虚拟角色出来&#xff0c;所以找了一些文档参考&#xff0c;其中有一个基于ChatGLM-6B使用ptuning进行微调&#xff0c;实现类instruction的效果的现成的项目&#xff0c;给大家分享下。 一、介绍 由于ChatGLM-6B 不支持instructio…

五子棋小游戏(sut实验报告)

实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏&#xff0c;显示游戏参数设置界面&#xff0c;用户输入参数后进入游戏界面&#xff0c;显示棋盘及双方博弈过程&#xff0c;游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏&#xff0c;可选择继续下…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

容量治理三板斧:扩容、限流与降级

前言 随着现代软件系统日益复杂和用户规模的不断增长&#xff0c;分布式架构成为了保持系统高可用性与高性能的标准解决方案。然而&#xff0c;随之而来的是对系统容量治理的新挑战。在这样的背景下&#xff0c;容量治理成为了分布式系统设计和运维中不可或缺的一环。要确保系…

Java毕业设计 基于SpringBoot vue学科竞赛项目管理系统

Java毕业设计 基于SpringBoot vue学科竞赛项目管理系统 SpringBoot vue 学科竞赛项目管理系统 功能介绍 学生&#xff1a;登录 验证码 首页推广 图片轮播 竞赛通知 我的比赛队伍 组队招募 获奖通告 系统公告 统计分析 修改密码 修改个人信息 投诉建议 教师&#xff1a;登录 …

腾讯云和阿里云4核8G云服务器多少钱一年和1个月费用对比

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

以某厂商方案为例,讲一下如何手工配置传统网络到SD-WAN网络的改造实施

正文共&#xff1a;1024 字 8 图&#xff0c;预估阅读时间&#xff1a;3 分钟 假设有这样一张网络&#xff0c;其中RTA和PCA表示某公司的A分支&#xff0c;通过中国电信CT路由器接入互联网ISP&#xff1b;RTB和PCB表示某公司的B分支&#xff0c;通过中国联通CU路由器接入互联网…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;PacingController 关系与BitrateProber 关系更为密切,在整个系统中的地位也更重要…

ssm+vue的高校课程评价系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校课程评价系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

大语言模型系列-GPT-2

文章目录 前言一、GPT-2做的改进二、GPT-2的表现总结 前言 《Language Models are Unsupervised Multitask Learners&#xff0c;2019》 前文提到&#xff0c;GPT-1利用不同的模型结构微调初步解决了多任务学习的问题&#xff0c;但是仍然是预训练微调的形式&#xff0c;GPT-…

防御保护--IPSec VPN实验

防御保护--IPsec VPN实验 一、实验需求二、配置IP地址三、配置IPSec通道四、配置NAT策略4.1 配置NAT策略4.2 配置服务器映射 五、配置安全策略5.1 查看IKE协商是否建立&#xff1a; 六、配置静态路由七、测试 一、实验需求 基础配置和实验步骤可参考&#xff1a; 防御保护–防…