一个公司优化需要做多少个网站字体大全

张小明 2026/1/7 15:06:18
一个公司优化需要做多少个网站,字体大全,网页设置快捷键,网站的建设模式是指什么时候开始什么是 Mud 代码生成器#xff1f;Mud 代码生成器是一个基于 Roslyn 的源代码生成器#xff0c;用于自动生成数据实体、服务层相关代码#xff0c;提高开发效率。服务层代码生成包含以下主要功能#xff1a;服务类代码生成 - 根据实体类自动生成服务接口和服务实现类依赖注…什么是 Mud 代码生成器Mud 代码生成器是一个基于 Roslyn 的源代码生成器用于自动生成数据实体、服务层相关代码提高开发效率。服务层代码生成包含以下主要功能服务类代码生成 - 根据实体类自动生成服务接口和服务实现类依赖注入代码生成 - 自动为类生成构造函数注入代码包括日志、缓存、用户管理等常用服务服务注册代码生成 - 自动生成服务注册扩展方法简化依赖注入配置HttpClient API 代码生成 - 自动为标记了 HTTP 方法特性的接口生成 HttpClient 实现类HttpClient API 源生成器详解核心功能HttpClientApiSourceGenerator 是一个专门用于生成 HttpClient 实现类的源代码生成器。它基于 Roslyn 技术能够自动为标记了 [HttpClientApi] 特性的接口生成完整的 HttpClient 实现类支持 RESTful API 调用。工作原理源生成器的工作流程如下扫描项目中的接口查找标记了 [HttpClientApi] 特性的接口分析接口中定义的方法和参数根据 HTTP 方法特性如 [Get], [Post], [Put] 等生成相应的实现代码处理各种参数特性如 [Path], [Query], [Body], [Header]生成完整的 HttpClient 实现类包括构造函数、日志记录、错误处理等使用示例让我们通过一个具体的示例来了解如何使用这个生成器[HttpClientApi]public interface IDingTalkApi{[Get(/api/v1/user/{id})]TaskUserDto GetUserAsync([Query] string id);[Post(/api/v1/user)]TaskUserDto CreateUserAsync([Body] UserDto user);[Put(/api/v1/user/{id})]TaskUserDto UpdateUserAsync([Path] string id, [Body] UserDto user);[Delete(/api/v1/user/{id})]Taskbool DeleteUserAsync([Path] string id);}当项目编译时HttpClientApiSourceGenerator 会自动生成一个实现该接口的类大致如下// 自动生成的代码public partial class DingTalkApi : IDingTalkApi{private readonly HttpClient _httpClient;private readonly ILoggerDingTalkApi _logger;private readonly JsonSerializerOptions _jsonSerializerOptions;public DingTalkApi(HttpClient httpClient, ILoggerDingTalkApi logger){_httpClient httpClient ?? throw new ArgumentNullException(nameof(httpClient));_logger logger ?? throw new ArgumentNullException(nameof(logger));_jsonSerializerOptions new JsonSerializerOptions{PropertyNamingPolicy JsonNamingPolicy.CamelCase,WriteIndented false,PropertyNameCaseInsensitive true};}public async TaskUserDto GetUserAsync(string id){// 自动生成的 HTTP GET 请求逻辑_logger.LogDebug(开始HTTP GET请求: {Url}, /api/v1/user/{id});var url $/api/v1/user/{id};using var request new HttpRequestMessage(HttpMethod.Get, url);// 处理查询参数var queryParams new Liststring();if (id ! null)queryParams.Add($id{id});if (queryParams.Any())url ? string.Join(, queryParams);// 发送请求并处理响应// ... 完整的请求处理逻辑}}支持的 HTTP 方法该生成器支持所有标准的 HTTP 方法[HttpClientApi]public interface IExampleApi{[Get(/api/resource/{id})]TaskResourceDto GetResourceAsync([Path] string id);[Post(/api/resource)]TaskResourceDto CreateResourceAsync([Body] ResourceDto resource);[Put(/api/resource/{id})]TaskResourceDto UpdateResourceAsync([Path] string id, [Body] ResourceDto resource);[Delete(/api/resource/{id})]Taskbool DeleteResourceAsync([Path] string id);[Patch(/api/resource/{id})]TaskResourceDto PatchResourceAsync([Path] string id, [Body] object patchData);[Head(/api/resource/{id})]Taskbool CheckResourceExistsAsync([Path] string id);[Options(/api/resource)]TaskHttpResponseMessage GetResourceOptionsAsync();}参数特性详解生成器支持多种参数特性以处理不同的 HTTP 请求参数Path 参数特性用于替换 URL 模板中的路径参数[Get(/api/users/{userId}/orders/{orderId})]TaskOrderDto GetOrderAsync([Path] string userId, [Path] string orderId);Query 参数特性用于生成查询字符串参数[Get(/api/users)]TaskListUserDto GetUsersAsync([Query] string name,[Query] int? page,[Query] int? pageSize);Body 参数特性用于设置请求体内容[Post(/api/users)]TaskUserDto CreateUserAsync([Body] UserDto user);// 支持自定义内容类型[Post(/api/users)]TaskUserDto CreateUserAsync([Body(ContentType application/xml)] UserDto user);// 支持字符串内容[Post(/api/logs)]Task LogMessageAsync([Body(UseStringContent true)] string message);Header 参数特性用于设置请求头[Get(/api/protected)]TaskProtectedData GetProtectedDataAsync([Header] string authorization);// 自定义头名称[Get(/api/protected)]TaskProtectedData GetProtectedDataAsync([Header(X-API-Key)] string apiKey);复杂参数处理生成器还能处理复杂的参数类型复杂查询参数支持复杂对象作为查询参数自动展开为键值对[Get(/api/search)]TaskListUserDto SearchUsersAsync([Query] UserSearchCriteria criteria);public class UserSearchCriteria{public string Name { get; set; }public int? Age { get; set; }public string Department { get; set; }}// 生成的查询字符串?NameJohnAge30DepartmentIT路径参数自动替换自动处理 URL 模板中的路径参数[Get(/api/users/{userId}/orders/{orderId}/items/{itemId})]TaskOrderItemDto GetOrderItemAsync([Path] string userId,[Path] string orderId,[Path] string itemId);// 自动替换/api/users/123/orders/456/items/789错误处理与日志记录生成的代码包含完整的错误处理和日志记录public async TaskUserDto GetUserAsync(string id){try{_logger.LogDebug(开始HTTP GET请求: {Url}, /api/v1/user/{id});// 请求处理逻辑using var response await _httpClient.SendAsync(request);var responseContent await response.Content.ReadAsStringAsync();_logger.LogDebug(HTTP请求完成: {StatusCode}, 响应长度: {ContentLength},(int)response.StatusCode, responseContent?.Length ?? 0);if (!response.IsSuccessStatusCode){_logger.LogError(HTTP请求失败: {StatusCode}, 响应: {Response},(int)response.StatusCode, responseContent);throw new HttpRequestException($HTTP请求失败: {(int)response.StatusCode} - {response.ReasonPhrase});}// 响应处理逻辑}catch (Exception ex){_logger.LogError(ex, HTTP请求异常: {Url}, url);throw;}}HttpClient API 注册源生成器详解核心功能HttpClientApiRegisterSourceGenerator 是另一个重要的组件它自动为标记了 [HttpClientApi] 特性的接口生成依赖注入注册代码简化 HttpClient 服务的配置。工作原理该生成器的工作流程如下扫描项目中的接口查找标记了 [HttpClientApi] 特性的接口提取特性中的配置参数如 BaseUrl、Timeout 等生成用于依赖注入的扩展方法自动注册接口和实现类到服务容器中使用示例首先定义 HTTP API 接口[HttpClientApi(https://api.dingtalk.com, Timeout 30)]public interface IDingTalkApi{[Get(/api/v1/user/{id})]TaskUserDto GetUserAsync([Query] string id);[Post(/api/v1/user)]TaskUserDto CreateUserAsync([Body] UserDto user);}[HttpClientApi(https://api.wechat.com, Timeout 60)]public interface IWeChatApi{[Get(/api/v1/user/{id})]TaskUserDto GetUserAsync([Query] string id);}生成器会自动生成以下注册代码// 自动生成的代码 - HttpClientApiExtensions.g.csusing System;using System.Net.Http;using Microsoft.Extensions.DependencyInjection;namespace Microsoft.Extensions.DependencyInjection{public static class HttpClientApiExtensions{public static IServiceCollection AddWebApiHttpClient(this IServiceCollection services){services.AddHttpClientglobal::YourNamespace.IDingTalkApi, global::YourNamespace.DingTalkApi(client {client.BaseAddress new Uri(https://api.dingtalk.com);client.Timeout TimeSpan.FromSeconds(30);});services.AddHttpClientglobal::YourNamespace.IWeChatApi, global::YourNamespace.WeChatApi(client {client.BaseAddress new Uri(https://api.wechat.com);client.Timeout TimeSpan.FromSeconds(60);});return services;}}}配置选项HttpClientApi 特性参数// 基本配置[HttpClientApi(https://api.example.com)]public interface IExampleApi { }// 配置超时时间[HttpClientApi(https://api.example.com, Timeout 120)]public interface IExampleApi { }// 使用命名参数[HttpClientApi(BaseUrl https://api.example.com, Timeout 60)]public interface IExampleApi { }使用方式在应用程序启动时调用// 在 Program.cs 或 Startup.cs 中var builder WebApplication.CreateBuilder(args);// 自动注册所有 HttpClient API 服务builder.Services.AddWebApiHttpClient();// 或者与其他服务注册一起使用builder.Services.AddControllers().AddWebApiHttpClient();在控制台应用程序中使用// 在控制台应用程序中var services new ServiceCollection();// 注册 HttpClient API 服务services.AddWebApiHttpClient();var serviceProvider services.BuildServiceProvider();var dingTalkApi serviceProvider.GetRequiredServiceIDingTalkApi();两个生成器的协同工作HttpClientApiRegisterSourceGenerator 与 HttpClientApiSourceGenerator 完美配合提供完整的开发体验HttpClientApiSourceGenerator 生成接口的实现类HttpClientApiRegisterSourceGenerator 生成依赖注入注册代码完整的开发体验定义接口 → 自动生成实现 → 自动注册服务完整示例// 1. 定义接口[HttpClientApi(https://api.dingtalk.com, Timeout 30)]public interface IDingTalkApi{[Get(/api/v1/user/{id})]TaskUserDto GetUserAsync([Query] string id);}// 2. 自动生成实现类 (由 HttpClientApiSourceGenerator 生成)// public partial class DingTalkApi : IDingTalkApi { ... }// 3. 自动生成注册代码 (由 HttpClientApiRegisterSourceGenerator 生成)// public static class HttpClientApiExtensions { ... }// 4. 在应用程序中使用var builder WebApplication.CreateBuilder(args);builder.Services.AddWebApiHttpClient(); // 自动注册var app builder.Build();// 5. 在服务中注入使用public class UserService{private readonly IDingTalkApi _dingTalkApi;public UserService(IDingTalkApi dingTalkApi){_dingTalkApi dingTalkApi;}public async TaskUserDto GetUserAsync(string userId){return await _dingTalkApi.GetUserAsync(userId);}}高级配置自定义 HttpClient 配置如果需要更复杂的 HttpClient 配置可以在注册后继续配置builder.Services.AddWebApiHttpClient().ConfigureHttpClientDefaults(httpClient {httpClient.ConfigurePrimaryHttpMessageHandler(() new HttpClientHandler{UseProxy false,AllowAutoRedirect false});});添加自定义请求头builder.Services.AddHttpClientIDingTalkApi, DingTalkApi(client {client.BaseAddress new Uri(https://api.dingtalk.com);client.Timeout TimeSpan.FromSeconds(30);client.DefaultRequestHeaders.Add(User-Agent, MyApp/1.0);client.DefaultRequestHeaders.Add(X-API-Key, your-api-key);});生成的代码结构obj/Debug/net8.0/generated/├── Mud.ServiceCodeGenerator/├── HttpClientApiSourceGenerator/│ └── YourNamespace.DingTalkApi.g.cs└── HttpClientApiRegisterSourceGenerator/└── HttpClientApiExtensions.g.cs最佳实践统一配置在 [HttpClientApi] 特性中统一配置所有 API 的基础设置合理超时根据 API 的响应时间设置合理的超时时间命名规范遵循接口命名规范I{ServiceName}Api错误处理在服务层处理 API 调用异常日志记录利用生成的日志记录功能监控 API 调用如何查看生成的代码要查看生成的代码可以在项目文件中添加以下配置PropertyGroupEmitCompilerGeneratedFilestrue/EmitCompilerGeneratedFiles/PropertyGroup生成的代码将位于 obj/[Configuration]/[TargetFramework]/generated/ 目录下文件名以 .g.cs 结尾。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

上海网站建设的深圳南山网络公司

🕸️ 前言:为什么高手都抛弃了 WebUI? 很多刚接触 Stable Diffusion 的朋友,第一站都是 SD-WebUI(那个经典的橙色界面)。它简单直观,但玩久了你会发现:显存稍微小点就爆、生成速度慢…

张小明 2025/12/24 11:44:54 网站建设

深圳网站平面设计网站开发我们都能解决

PHP基础功能与使用技巧 在编程过程中,代码复用和功能的有效实现是非常重要的。PHP作为一种广泛使用的服务器端脚本语言,提供了丰富的功能和函数来帮助开发者更高效地完成任务。下面将详细介绍PHP中包含其他文件、基本函数(如字符串处理、数组操作、文件操作)以及一些杂项函…

张小明 2025/12/24 11:44:36 网站建设

网站建设的费用是多少钱网上怎么做广告

GmsCore故障诊断实战:从症状定位到一键修复 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 地图定位突然失效?推送通知收不到?当你遇到这些恼人的问题时&…

张小明 2025/12/24 11:44:37 网站建设

做产品展示网站求一个好用的网站

第一章:多模态 Agent 容器化部署的核心挑战在现代人工智能系统中,多模态 Agent(Multi-modal Agent)融合文本、图像、语音等多种输入输出形式,其复杂性远超传统单模态模型。将此类 Agent 部署至生产环境时,容…

张小明 2025/12/24 11:44:38 网站建设

网站建设公司的经营范围多商城系统

零基础转行信息安全,老师傅来支招(2025年最新数据支撑) 现在这个环境下,转行做信息安全的人已经越来越少了,但还是有热爱这一行的人。 今天,我们以零基础入行为例,按照下面的成长路径&#xf…

张小明 2025/12/29 3:42:11 网站建设

做创意ppt网站有哪些方面网站源码换模板

多节点系统中硬件I2C主设备切换的实战设计与工程落地在嵌入式系统的演进过程中,我们早已从“单片机控制几个外设”的简单模型,走向了多个智能节点协同工作的复杂架构。尤其是在工业自动化、边缘计算网关和高可用传感网络中,如何让多个MCU安全…

张小明 2025/12/26 7:03:37 网站建设