一个简单的ASP.NET 一致性返回工具库

ops/2024/11/28 14:15:37/

本文主要介绍了 Sang.AspNetCore.CommonLibraries 这个 ASP.NET 通用库,它目前提供了一致性返回和简单提示页面的功能,旨在简化开发工作,提高代码的复用性和可维护性。

1. 介绍

Sang.AspNetCore.CommonLibraries 是一个为 ASP.NET Core 提供常用功能和工具的通用库,旨在简化开发工作,提高代码的复用性和可维护性。目前主要提供了一致性返回和简单提示页面的功能,后续将继续扩展更多实用功能:

  • 异常处理:提供未处理异常的过滤器,允许自定义异常处理行为(详见 FilterExtensions.cs)。
  • 模型验证:提供模型验证的过滤器,允许自定义模型验证失败时的处理行为(详见 FilterExtensions.cs)。
  • 消息模型:定义了一个通用的 API 响应消息模型(详见 MessageModel.cs)。
  • 消息页面:定义了一个用于生成 HTML 消息页面的类,支持 Markdown 链接(详见 MessagePage.cs)。

项目开源地址:https://github.com/sangyuxiaowu/Sang.AspNetCore.CommonLibraries?WT.mc_id=DT-MVP-5005195

2. 使用方法

2.1 安装

可以通过 NuGet 包管理器安装此库:

Install-Package Sang.AspNetCore.CommonLibraries

或者使用 .NET CLI:

dotnet add package Sang.AspNetCore.CommonLibraries

2.2 一致的返回模型

将 API 控制器的返回类型更改为 MessageModel<T>,其中 T 是返回数据的类型。例如:

[HttpGet]
public MessageModel<string> Get()
{return new MessageModel<string>{Status = 0,Msg = "Success",Data = "Hello, World!"};
}

添加未处理异常和模型验证失败的过滤器:

builder.Services.AddUnhandledExceptionFilter(config =>
{config.Status = 500;config.StatusCode = 500;config.WithTraceId = false; // 是否返回 TraceIdconfig.Message = "Unhandled Exception";
});

添加模型验证失败的过滤器:

builder.Services.AddModelValidationExceptionFilter(config =>
{config.Status = 400; // 业务状态码config.StatusCode = 400; // HTTP 状态码config.Message = "Model Validation Exception"; // 自定义消息
});

2.3 生成 HTML 消息页面

要生成 HTML 消息页面,可以使用 MessagePage 类。该类提供了一些属性用于设置页面内容,然后可以调用 Render 方法生成 HTML 页面。

页面 UI 采用 WeUI 2.5.11 版本,风格类似微信官方账号,包括标题、图标、内容、列表、链接、按钮和页脚链接。

public ContentResult Page()
{var page = new MessagePage{Icon = MsgIcon.Safe_Warn,HtmlTitle = "网页标题",Title = "消息标题",Desc = "详细内容,可以根据实际需要安排,如果换行不要超过规定长度,居中显示 [支持超链接](http://www.example.com)",DescInfo = "详细内容,可以根据实际需要安排,如果换行不要超过规定长度,居中显示",Custom = "<textarea>自定义html区域</textarea>",ListInfo = new List<string> { "列表提示项", "列表提示项", "列表提示项" },KeyValues = new Dictionary<string, string> { { "姓名", "张三" }, { "年龄", "123" } },ListUrl = new List<UrlInfo> { new("链接1", "javascript:"), new("链接2", "javascript:") },TipsPre = "详细内容,可以根据实际需要安排,如果换行不要超过规定长度,居中显示 [支持超链接](http://www.example.com)",TipsNext = "详细内容,可以根据实际需要安排,如果换行不要超过规定长度,居中显示 [支持超链接](http://www.example.com)",OprBtn = new List<UrlInfo> { new("链接1", "javascript:"), new ("链接2", "javascript:", "default") },FooterLink = new UrlInfo("页脚链接", "javascript:"),CopyRight = "Sang Late Autumn 版权信息<br>© 2014-2021 Sang. All Rights Reserved."};return new ContentResult{ContentType = "text/html",StatusCode = 200,Content = page.Render()};
}

3. 实际应用场景

3.1 API 开发

在开发 RESTful API 时,使用一致的返回模型可以简化客户端处理响应的逻辑。通过 MessageModel<T>,所有的 API 响应都遵循相同的结构,客户端只需处理一种格式,大大减少了解析和处理响应的复杂性。

3.2 错误处理

通过添加未处理异常和模型验证失败的过滤器,可以确保所有的异常和错误都能被捕获并返回一致的错误信息。这不仅提升了应用的稳定性,还简化了错误处理逻辑,使得开发者可以专注于业务逻辑而不是错误处理。

3.3 用户提示页面

在某些场景下,需要向用户展示提示信息或错误信息,例如表单提交失败、权限不足等。使用 MessagePage 类,可以快速生成风格统一的提示页面,提升用户体验。

4. 总结

Sang.AspNetCore.CommonLibraries 是一个简单的 ASP.NET 通用库,提供了一致性返回和简单提示页面的功能,旨在简化开发工作,提高代码的复用性和可维护性。如果你正在开发一个 ASP.NET 项目,可以考虑使用这个库,它会为你的项目带来很多便利。


http://www.ppmy.cn/ops/137374.html

相关文章

后端并发编程操作简述 Java高并发程序设计 六类并发容器 七种线程池 四种阻塞队列

目录 并发集合 1. ConcurrentHashMap&#xff1a; 2. CopyOnWriteArrayList&#xff1a; 3. CopyOnWriteArraySet&#xff1a; 4. BlockingQueue系列&#xff1a; 5. ConcurrentSkipListMap 和 ConcurrentSkipListSet&#xff1a; 6. ConcurrentLinkedDeque&#xff1a;…

RabbitMQ高级特性:TTL、死信队列与延迟队列

RabbitMQ高级特性&#xff1a;TTL、死信队列与延迟队列 RabbitMQ作为一款开源的消息代理软件&#xff0c;广泛应用于分布式系统中&#xff0c;用于实现消息的异步传递和系统的解耦。其强大的高级特性&#xff0c;包括TTL&#xff08;Time-To-Live&#xff09;、死信队列&#…

第二十二周周报:Stable Diffusion

目录 摘要 Abstract 1. Stable Diffusion 1.1 CLIP 1.2 U-Net 1.3 VAE 1.4 图像生成测试 2. LoRA 总结 摘要 Stable Diffusion是一种深度学习模型&#xff0c;专门设计用于生成高质量的图像。该模型结合了扩散模型和Transformer架构的特点&#xff0c;通过文本处理、…

网络安全防范课后参考答案

第12章 网络安全防范课后参考答案 &#xff08;自己整理经供参考&#xff09; 1. 网络常见危害中病毒的传染性最快、最大 2. 木马是一种基于远程控制的黑客工具&#xff0c;它具有隐蔽性和非授权的特点 3. 目前网络中最主要的威胁主要有&#xff08;病毒、黑…

背不下来系列

Docker 创建容器 docker run --privilegedtrue -d -i -p 12345:80 -p 54321:81 -v /home/user/work/:/server/ --name <container-name> docker.io/node:18.14.2 ShellCrash 安装 export urlhttps://fastly.jsdelivr.net/gh/juewuy/ShellCrashmaster && wget …

LeetCode:24. 两两交换链表中的节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表…

【Linux】Make/Makefile

这个3/4行的语法和1/2行是一样的。也是依赖关系和依赖方法。 make命令扫描makefile文件时&#xff0c;从上向下扫描&#xff0c;默认形成一个目标文件。 指定make clean的时候才回去执行对应的清除。 为什么要给我们的clean.PHONY:clean声明它是伪目标呢&#xff1f; PHONY类…

门控循环单元(GRU)与时间序列预测应用

一、GRU简介 门控循环单元&#xff08;Gated Recurrent Unit&#xff0c;简称GRU&#xff09;是一种简化版的LSTM&#xff08;长短期记忆网络&#xff09;&#xff0c;专门用于解决长序列中的梯度消失问题。与LSTM相比&#xff0c;GRU具有更简单的结构和较少的参数&#xff0c…