Anduin Xue
Anduin Xue

Anduin's Tech Blog

ASP.NET Core


Validate an object in any C# projects

这篇文章详细介绍了如何使用Python进行数据分析和异常值检测,包括使用pandas、scikit-learn等库的方法。接着探讨了机器学习模型验证的重要性,特别是过拟合问题及交叉验证技术。文章还深入讲解了Keras在深度学习中的应用,涵盖神经网络构建、优化器选择和超参数调优策略。此外,文章讨论了如何通过Flask框架部署模型至Web服务,并利用Docker实现容器化以简化部署流程。最后,提到了使用Prometheus和Grafana进行系统监控与性能分析的方法。--DeepSeek

ASP.NET Core C# .NET Validation DataAnnotations Custom Validation

Build a common cache service for your C# app.

该代码展示了如何为缓存功能编写单元测试,涵盖了基本缓存、带条件的缓存、空值处理、缓存清除以及选择器的应用。每个测试方法使用不同的数据点和场景来验证缓存的行为,包括首次加载时的慢响应时间、命中缓存后的快响应时间,以及对特定条件和边缘情况(如空值)的正确处理。这些测试确保了缓存机制在各种情况下都能正常工作,并覆盖了常见的缓存应用场景。--DeepSeek

ASP.NET Core C# .NET Core Performance Caching .NET Cache MemoryCache

ASP.NET Core Integration Test using MSTest

这篇文章探讨了如何在ASP.NET Core项目中使用MSTest进行集成测试,而不仅仅是依赖官方文档中提供的xunit示例。作者通过实际步骤展示了如何替换xunit并配置MSTest来完成相同的任务。文章首先介绍了从项目结构中移除xunit并安装MSTest的过程,接着详细说明了如何在测试项目中启动ASP.NET Core服务器,并使用HttpClient进行请求测试。最后,作者强调了测试清理的重要性,确保每次测试后正确停止和释放服务器资源。这篇文章不仅为读者提供了一种替代方案,还激发了读者思考为什么选择MSTest而非xunit,以及在实际应用中可能需要注意哪些问题。通过阅读本文,读者可以深入了解如何灵活配置不同的测试框架,并在自己的项目中实现高效的集成测试。--DeepSeek

ASP.NET Core C# .NET Core Test MSTest Functional Test Integration Test

Fire and forget in ASP.NET Core with dependency alive

这篇文章探讨了在ASP.NET Core中实现"Fire and Forget"模式时可能遇到的问题以及如何通过依赖注入和生命周期管理来解决这些问题。作者指出,在控制器中直接使用`Task.Run()`启动长时间运行的任务可能会导致依赖对象过早释放,从而引发不可预知的结果。为了解决这一问题,文章提出了一种新的解决方案:创建一个单例服务(CannonService),该服务能够确保任务执行过程中所需的依赖始终保持存活状态。通过这种方式,不仅可以避免依赖被意外释放的问题,还能实现异步任务的非阻塞执行。 文中详细介绍了如何构建和注册这个CannonService,并展示了如何在控制器中使用它来执行需要长时间运行的任务(例如发送确认邮件)。此外,作者还提供了相关的NuGet包资源,方便开发者快速集成这一解决方案到实际项目中。 文章最后提醒读者,在使用"Fire and Forget"模式时,除了关注依赖生命周期的管理外,还需要考虑任务失败后的错误处理机制以及日志记录的重要性。同时,作者提出了几个值得思考的问题:在实际应用场景中,哪些情况最适合使用"Fire and Forget"模式?如何平衡异步任务的执行效率与系统资源的占用?这些问题不仅帮助读者更好地理解文章内容,也激发了对相关技术更深层次的探索和实践。--DeepSeek

ASP.NET Core C# Async Fire and forget dependency injection singleton service

Creating a proxy to another URL with ASP.NET Core

这篇博客介绍了如何在 ASP.NET Core 中实现一个简单的 HTTP 代理逻辑,使你的项目能够将请求转发到任意目标 URL。通过创建 `CreateProxyHttpRequest` 和 `CopyProxyHttpResponse` 扩展方法,你可以轻松地将用户的原始请求转换为可重用的 `HttpRequestMessage` 并发送给目标服务器,同时将目标服务器的响应结果返回给用户浏览器。文章通过示例代码展示了如何在控制器中使用这些扩展方法实现一个简单的代理功能,并验证了其有效性。 这篇文章不仅帮助开发者理解 HTTP 代理的基本原理,还提供了一个灵活且可扩展的解决方案,适用于需要跨域请求或访问受限资源的场景。你是否也在寻找一种高效的方式来处理复杂的网络请求?通过本文的方法,你可以快速构建自己的代理逻辑并根据实际需求进行定制化开发。--DeepSeek

ASP.NET Core C# Reverse Proxy Web Proxy HTTP Proxy

EF second layer cache to enhance your SQL database performance based on Redis

文章介绍了在ASP.NET Core应用中使用Entity Framework Core进行数据库查询优化的方法,特别是通过添加二级缓存来提升性能。文章首先介绍了内存缓存的实现方法,使用了EFCoreSecondLevelCacheInterceptor库,并详细说明了如何配置和使用该库。接着,文章扩展到Redis分布式缓存的应用场景,介绍了如何安装必要的NuGet包(如EasyCaching.Redis),并展示了如何在应用程序中配置Redis缓存提供程序以替代内存缓存。最后,文章提到了如何在appsettings.json文件中添加Redis的连接信息,并通过Azure Redis Cache示例说明了如何获取必要的配置参数。整个过程无需修改业务代码即可显著提升应用性能,展示了使用Redis作为分布式缓存的优势。--DeepSeek

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

HTTP post file from .NET Core new HTTP client

本文介绍了在 .NET Core 3 中使用新的 HTTP 客户端上传文件的方法。通过 `MultipartFormDataContent` 类,可以轻松处理多部分表单数据,实现文件上传。文章提供了代码示例,展示了如何创建 `MultipartFormDataContent` 对象、添加文件流以及发送 POST 请求。此外,还讨论了与传统表单 URL 编码内容的区别,并强调了使用新客户端的优势。你是否也遇到了需要在 .NET Core 中上传文件的需求?了解这些步骤后,你是否能想到更多优化上传过程的方法?--DeepSeek

ASP.NET Core C# .NET Core HTTP Web File HTTP Client POST

Microsoft account integrated sign in via C#

这篇文章介绍了一种使用C#语言实现与微软服务器认证的方法。作者详细讲解了如何通过OAuth 2.0协议完成用户身份验证,并获取用户信息。主要内容包括:首先需要在Azure Portal中注册一个应用程序并获取应用ID和密钥;然后在代码中引入必要的NuGet包,并配置AppSettings.json文件存储相关密钥信息;接着通过实现MicrosoftService类来处理认证逻辑,其中包括获取访问令牌(AccessToken)的方法、获取用户详细信息的接口以及自定义的异常处理机制。作者还提供了完整的源代码链接供参考。--DeepSeek

ASP.NET Core Azure Microsoft OAuth Login Authentication

Share view component between different ASP.NET Core web project

这篇博客详细探讨了如何在不同的ASP.NET Core Web项目之间共享视图组件,以避免重复编写相同的逻辑或组件。通过创建一个支持Razor的类库项目,并按照步骤配置项目文件和组织视图组件,开发者可以轻松实现跨项目的视图组件复用。文章还展示了如何在新项目中导入这些共享组件,并提供了实际使用的示例。这种方法不仅提高了开发效率,还简化了代码维护。你是否也遇到过需要在多个项目之间共享视图组件的需求?通过这篇文章的指导,你可以高效地实现这一目标。此外,思考一下:除了视图组件,还有哪些类型的资源或逻辑可以通过类似的方法进行跨项目共享,从而进一步提升开发流程的整体效率?--DeepSeek

ASP.NET Core C# class library View component ViewComponents ClassLibrary

Support multi-tenant in pure Entity Framework Core

这篇文章探讨了如何仅使用纯Entity Framework Core实现多租户功能。通过创建包含TenantId字段的实体类,并结合自定义DBContext,可以轻松地为每个租户隔离数据。文章详细介绍了如何在OnModelCreating方法中设置查询过滤器以确保只返回当前租户的数据,并在SaveChanges方法中自动填充新增记录的TenantId字段。此外,文章还展示了如何通过构造函数传递租户ID来创建多租户支持的DBContext实例,使开发者能够像使用普通上下文一样编写LINQ查询而无需手动处理租户逻辑。最后,文章提到可以轻松将现有项目迁移到多租户应用程序,并提出了值得思考的问题:在实际应用中如何进一步扩展这一解决方案以适应更多复杂场景?--DeepSeek

ASP.NET Core C# Entity Framework Multi-tenant Entity Framework Core ASP.NET Boilerplate

Auto update database for ASP.NET Core with Entity Framework

这篇文章探讨了如何在 ASP.NET Core 项目中通过 Entity Framework 实现数据库的自动更新,旨在解决手动执行 `dotnet ef database update` 命令带来的潜在问题和不便。文章首先强调了自动迁移可能带来的风险,包括数据丢失、分支切换导致的问题以及迁移失败的可能性,提醒开发者谨慎处理。接着,作者介绍了如何通过添加 Polly 和 Entity Framework 工具依赖,并编写扩展方法,在应用程序启动时自动执行数据库迁移,同时支持重试机制以提高可靠性。文章最后指出,脚本仅在应用程序启动时生效,其他 EF 命令不会触发迁移,确保了开发过程的灵活性和安全性。--DeepSeek

ASP.NET Core C# Entity Framework SQL Server Database Migration Automatic Update

Limit ASP.NET Core request frequency by IP address

本文讨论了如何限制ASP.NET Core应用中基于IP地址的请求频率以防止滥用或攻击。默认情况下,用户可以无限制地向 ASP.NET Core 网站服务器发送请求,这可能导致垃圾数据提交或服务崩溃。为了避免这种情况,需要一个解决方案来按IP分组请求、限制请求频率并在超出限制时返回错误信息。 虽然存在AspNetCoreRateLimit这样的现有库,但该库过于复杂且无法按控制器或动作进行过滤。因此,作者创建了一个更简单轻量的自定义实现:`LimitPerMin` 属性。这个属性使用内存字典存储IP地址及其对应路径的请求频率,并在超出预设限制时返回 HTTP 429(Too Many Requests)状态码。 通过为控制器或动作添加 `[LimitPerMin]` 或 `[LimitPerMin(自定义限制)]` 属性,可以轻松实现基于IP和路径的速率限制。默认情况下,允许每分钟30次请求,超出后将返回重试时间提示并阻止进一步请求。该方案还支持设置剩余请求头信息,帮助客户端了解当前限制状态。 这种简单有效的解决方案不仅避免了现有库的复杂性,还能灵活适配不同场景下的速率控制需求。你是否在寻找一个轻量且易于集成的ASP.NET Core请求频率限制方案?这个自定义实现可能正是你需要的答案。--DeepSeek

ASP.NET Core .NET Core IP HTTP Rate Limiting IP Based