1.开源.NET8.0小项目伪微服务框架(分布式、布式EFCore、架构Redis、源码RabbitMQ、布式Mysql等)
2.分布式和微服务区别
3..NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 架构模式
4.MassTransit - .NET Core 的分布式应用程序框架
5..netå
å«ä»ä¹
6.C# .NET面试系列六:ASP.NET MVC
开源.NET8.0小项目伪微服务框架(分布式、EFCore、源码unity 源码解读Redis、布式RabbitMQ、架构Mysql等)
本文探讨了从项目需求出发,源码将通用功能抽离并封装为微服务框架的布式过程,旨在提升开发效率与代码复用。架构项目采用了.NET 8.0 技术栈,源码结合了分布式、布式EFCore、架构Redis、源码RabbitMQ、Mysql等关键技术,构建了一个基础服务框架。框架设计力求简洁,但因作者思考与架构能力尚有提升空间,以及开发时间紧张,项目仍在初期阶段。读者可通过提供的链接访问项目详情,了解当前单节点服务部署情况。
项目结构以`sun.Core`作为核心中转层,简化依赖关系并封装关键组件与服务。实现功能包括用户认证、登录与刷新机制、Swagger API 文档生成、日志记录、错误处理、微服务间的通信等。作者通过依赖注入、双token实现登录、无感刷新前端token、任务发布源码Authentication安全授权、统一REST APIs文档、初始化配置、错误日志记录、操作日志记录、统一返回前端数据、数据库操作、分布式ID生成、分布式缓存与锁、异步任务、秒级定时任务、数据初始化、Excel导入导出、一键部署与自动化脚本,以及Docker部署等技术,构建了较为全面的微服务框架。
框架设计中包含了对单点登录、权限控制、操作日志记录、统一接口返回等关键功能的实现,以及通过反射和自定义过滤器进行日志记录与接口权限验证等特性。同时,通过引入Docker容器化部署,实现了快速、一致的项目部署流程。此外,作者还计划进一步优化项目代码,提升性能,以及开发简易微前端框架,以适应未来需求。
项目亮点包括对现代微服务架构的理解与实践,以及对开源技术的灵活应用。项目虽存在初步阶段的不足与待优化之处,但通过持续的Java类源码开发与学习,有望逐步完善并提高框架的稳定性、性能和可维护性。通过社区反馈与实践积累,项目将持续进化,为用户提供更高效、更安全、更易扩展的微服务解决方案。
分布式和微服务区别
1、分布式架构是分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内容非常广,相关的书籍也非常多,也没有涉及这些技术的细节,只是从各种分布式系统平台产生的背景和在软件开发中应用的情况来探讨它们的主要异同。
2、微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。
3、微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
4、从概念理解,分布式服务架构强调的是服务化以及服务的分散化,微服务则更强调服务的动漫app源码专业化和精细分工;从实践的角度来看,微服务架构通常是分布式服务架构,反之则未必成立。所以,选择微服务通常意味着需要解决分布式架构的各种难题。
5、区别分布式的方式是根据不同机器不同业务。将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。
6、微服务更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。
7、微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
8、微服务架构是分布式服务架构的子集。微服务架构通过更细粒度的服务切分,使得整个系统的迭代速度并行程度更高,但是运维的复杂度和性能会随着服务的粒度更细而增加。
.NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式
分布式缓存作为外部服务,提升ASP.NET Core应用性能与可扩展性,尤其是云服务或服务器集群环境。相比单服务器缓存方案,分布式缓存具备显著优势。
选用Redis作为缓存存储,通过微软IDistributedCache接口实现。
安装Microsoft.Extensions.Caching.StackExchangeRedis组件。注入分布式缓存服务,配合IDistributedCache扩展类操作缓存。扩展类中集成自定义JsonHelper。
WebAPI缓存过滤器设计,服务app源码参数包括两个,操作简单,直接添加于接口Action方法。例如,为GetUserInfo接口配置过滤器,缓存数据秒,根据不同Token身份区分用户请求,确保返回对应用户信息,并分别缓存。
.NET WebAPI采用IDistributedCache实现分布式缓存过滤器Redis模式的讲解结束。如有疑问,欢迎在评论区或私信交流。对分布式缓存技术感兴趣的朋友,欢迎关注正在维护的.NET基础框架项目,项目信息如下:
GitHub: github.com/dashiell-zha...
Gitee: gitee.com/dashiell-zhan...
MassTransit - .NET Core 的分布式应用程序框架
MassTransit是一个免费的、开源的.NET分布式应用程序框架,专为创建利用基于消息的松散耦合异步通信以实现更高可用性、可靠性和可扩展性的应用程序和服务设计。其显著特点包括易于使用的API,允许开发者专注于业务问题解决;广泛支持的部署选项,如RabbitMQ、Azure服务总线、ActiveMQ和Amazon SQS/SNS,无需重写代码;强大的消息模式、端到端解决方案以及内存测试工具,为快速单元测试提供全面集成验证;同时,它还具备分布式跟踪和监控能力。
为了简化新项目创建,MassTransit提供了项目和项目模板。通过执行命令`dotnet new -i MassTransit.Templates`,可以安装这些模板。一旦模板安装完毕,创建服务就变得相对简单,只需在控制台执行命令生成Worker。
在使用MassTransit创建服务时,会发现项目中有三个类文件:Program.cs作为标准入口点,负责配置主机生成器;Consumers/GettingStartedConsumer.cs作为运输消费者;Contracts/GettingStarted.cs则提供了一个示例消息,这些文件共同构成了项目的基本结构。
为了注册后台服务,通常在Program.cs的底部的`ConfigureServices`方法中添加相应的代码。对于消费者部分,编辑Consumers文件夹下的GettingStartedConsumer.cs文件,可以修改其中的日志记录语句。执行项目后,运行输出应已更改,显示生成输出的消息使用者。再次按Control+C退出。
项目源代码可在GitHub上找到:`github.com/MassTransit/...`。希望喜欢这篇文章的读者能给个关注并点个赞,以促进.NET生态圈的健康发展。对于技术交流,可添加微信并备注进群,微信号:mm。同时,关注公众号:dotNet编程大全,获取更多技术内容。
.netå å«ä»ä¹
ä¸ï¼ä»ä¹æ¯.Netï¼å®ä¸»è¦å æ¬ä»ä¹ï¼
.Netæ¯ä¸ºç®åå¨ç¬¬ä¸ä»£å ç¹ç½çé«åå¸å¼ç¯å¢ä¸çåºç¨ç¨åºå¼åï¼åºäºå¼æ¾äºèç½æ åååè®®ä¹ä¸ï¼å®ç°å¼è´¨è¯è¨åå¹³å°é«åº¦äº¤äºæ§ï¼èæ建çæ°ä¸ä»£è®¡ç®åéä¿¡å¹³å°ã
.Net主è¦å æ¬æ®éè¯è¨è¿è¡æ¶(Common Language Runtime)å.Netææ¶ç±»åºã
äºï¼.Net主è¦çä¼ç¹æåªäºï¼
.Netç主è¦ä¼ç¹æè·¨è¯è¨ï¼è·¨å¹³å°ï¼å®å ¨ï¼ä»¥å对å¼æ¾äºèç½æ åååè®®çæ¯æã
.Netæ¯æå¤ç§è¯è¨çäºæä½ï¼å³å¨ä¸ç§è¯è¨ä¸å¼åçç»ä»¶ï¼å¯å¨å¦ä¸ç»ä»¶ä¸éè¿é¢å对象ç继æ¿èå¾ä»¥éç¨ï¼ç®å.Netæ¯æçè¯è¨è¾¾äºåå¤ç§ã
.Netéè¿å°åè¯è¨å ç¼è¯æä¸é´è¯è¨(IL),ç¶ååæ§è¡æ¶ç¨å³æ¶(Just In Time)ç¼è¯å¨å°ä¹ç¼è¯ææ¬å°å¹³å°ä»£ç æ¥å®ç°å¼æå¹³å°ä¸å¯¹è±¡çäºæä½ï¼ç®å.Netæ¯æçå¹³å°æWindows,LinuxåUnixçæ¯ææ£å¨å¼åä¸ã
.Netéè¿æ®éè¯è¨è¿è¡æ¶(Common Language Runtime)æ¥å®ç°èµæºå¯¹è±¡ï¼ç±»åçå®å ¨ã
.Netéè¿å¯¹HTTP,XMLï¼SOAPï¼WSDLçInternetæ åç强å²æ¯ææä¾å¨å¼æç½ç»ç¯å¢ä¸è·åè¿ç¨æå¡ï¼è¿æ¥è¿ç¨è®¾å¤ï¼äº¤äºè¿ç¨åºç¨çç¼ç¨çé¢.
ä¸ï¼.Netä¸çæ®éè¯è¨è¿è¡æ¶(Common Language Runtime)æä»ä¹?å®å¨.Netä¸å¤ä»ä¹ä½ç½®ï¼
CLR(Common Language Runtime)æ®éè¯è¨è¿è¡æ¶æ¯æ´ä¸ª.net frameworkæ建çåºç¡ï¼æ¯å®ç°.Net跨平å°ï¼è·¨è¯è¨ï¼ä»£ç å®å ¨çæ ¸å¿ç¹æ§çå ³é®ãå®å®é ä¸æ¯é©»çå¨å åéçä¸æ®µä»£ç代ç ï¼è´è´£å¨æ´ä¸ª.netæ´ä¸ªæ§è¡æé´ç代ç 管çå·¥ä½ï¼æ¯è¾å ¸åçæï¼å å管çï¼çº¿ç¨ç®¡çï¼è¿ç¨ç®¡çï¼ä»£ç 强å¶å®å ¨ç±»åçãè¿äºé½å¯ç§°å¾ä¸.net frameworkççå½çº¿ãå®é ä¸ï¼æ®éè¯è¨è¿è¡æ¶ä»£çäºä¸é¨åæä½ç³»ç»ç管çåè½ã
åï¼.Netææ¶ç±»åºæ¯ä»ä¹ï¼å æ¬åªäºå 容ï¼
.Netlææ¶ç±»åºæ¯åºäºè¿è¡æ¶é¢å对象çç¹æ§è建é çï¼åæ®éè¯è¨è¿è¡æ¶ç´§å¯éæçä¸æå¯éç¨ç±»(Class)çéåãå®å¤§å¤§ç®åäºè½¯ä»¶å¼åçé¾åº¦ï¼èä¸å¾å®¹æä¸ç¬¬ä¸æ¹ç»ä»¶æ ç¼éæã
.Netæ¶æç±»åºä¸»è¦å æ¬å¯¹ä¸ä¸ç¼ç¨æ¨¡åçæ¯æï¼
1ï¼ æ§å¶å°åºç¨ç¨åºã
2ï¼ èæ¬å宿主åºç¨ç¨åºã
3ï¼ Windows Formsåºç¨ç¨åºï¼Windows æ¡é¢GUIåºç¨ç¨åºï¼ã
4ï¼ ASP.Netåºç¨ç¨åºã
5ï¼ Web Servicesåºç¨ç¨åºã
6ï¼ Windows æå¡ç¨åº
äºï¼.Netæ¯æçå¼åè¯è¨æåªäºï¼.Netè¯è¨çäºæä½æ§æ¯æä»ä¹ï¼
.Net声称æ¯æå¸é¢ä¸å¤ç§è¯è¨ï¼ä½ç®ååªæ微软å®æ¹åå¸çC#,Visual Basic.Netï¼Managed C++,åJsript,å ¶ä»åå声称æ£å¨å¼åä¸çæ¯æå·¥å ·æCOBOL,Eiffel,Perl,Smalltalk,Pythonã
.Netè¯è¨çäºæä½æ§æ¯æéµå¾ªæ®éè¯è¨è¿è¡æ¶ï¼Common Language Runtimeï¼è§èçè¯è¨å¨å¯¹è±¡ç»§æ¿æ¹é¢çæ¯æï¼å³ç¨ä¸ç§è¯è¨å¨.Netå¹³å°ä¸å¼åçç±»å¯å¨å¦ä¸è¯è¨ä¸éç¨ï¼è¿éè¿ä¸ç§ç§°ä½å¾®è½¯ä¸é´è¯è¨MILæ¥å®ç°ï¼å³è¯è¨ç¼è¯å¨é¦å å°è¯¥è¯è¨ç¼è¯æ微软ä¸é´è¯è¨ï¼åå¨ç¸åºå¹³å°ä¸ç¼è¯åºæ¬å°ä»£ç ãè¿ä¸åé½æ¯å¨æ®éè¯è¨è¿è¡æ¶çè§èä¸è¿è¡ã
å ï¼.Netæ¯æçå¹³å°æåªäºï¼å®ç跨平å°å®ç°å¾å¦ä½ï¼
ç®åæ¯æ.Netçå¹³å°æWindows , NT4 SP6a, Windows MeåWindows ãå ¶å£°ç§°æ¯æçå¹³å°æUnix,Linuxçï¼ç®åæä¸ä¸ªé¡¹ç®æ£å¨å¼åLinuxä¸ç.Netå¹³å°ï¼Ximianå ¬å¸çMono项ç®ï¼DotGNU以å Potable .NET.
ä¸ï¼.Netä¸COMçå ³ç³»æ¯ä»ä¹ï¼.Netæ¯å¦æå³çCOMçç»ç»ï¼
COMå®ä¹äºç»ä»¶å¯¹è±¡é´éä¿¡çäºè¿å¶æ åï¼.Netéè¿ç»ä»¶å ç½®çç±»åç³»ç»æä¾äºç±»ä¼¼çæºå¶ï¼å®ä¸ºæ¤æä¾äºå¦ä¸ä¸ªéç»ã.Net并ä¸æå³çCOMçç»ç»ï¼ä½å¿ å°å¤§å¤§åå°å¼å人å对COMçä¾èµã.Net æ¯æCOMå.Netç»ä»¶ä¹é´çäºæä½æ§ï¼å®é ä¸å¯éè¿Runtime Callable Wrapper(RCW)æ¥å®ç°å¨.Netä¸è·åCOMç»ä»¶ï¼éè¿COM Callable Wrapperï¼CCWï¼æ¥å®ç°å¨COMä¸è·å.Netç»ä»¶ã
å «ï¼.Netä¸çä¸é´è¯è¨(IL)æ¯ä»ä¹?å®å¨.Netå¹³å°ä¸èµ·ä»ä¹ä½ç¨ï¼å¼å人åå¯ä»¥ç¨ä¸é´è¯è¨(IL)ç¼ç¨åï¼
.Netä¸çä¸é´è¯è¨æ¯æå¯ä»¥å¨æ®éè¯è¨è¿è¡æ¶è§èä¸,.æ§è¡æ¶éè¿å³æ¶(Just In Time)ç¼è¯å¨è½¬å为æ¬å°ä»£ç çï¼ä¸CPUç¬ç«çä¸ææ令éåãå®å¨.Netå¹³å°ä¸æ¯å®ç°è¯è¨äºæä½çä¸ä¸ªæ ¸å¿ç¯èï¼ææ.Netå¹³å°çè¯è¨é½è¦å 被ç¼è¯æä¸é´è¯è¨(IL)ãç¨åºåä¹å¯ä»¥ç´æ¥å©ç¨ä¸é´è¯è¨ï¼ILï¼æ¥ç¼ç¨ï¼ä½ä¸æ¨èé£æ ·åï¼ä¸é´è¯è¨å¯¹ç解.Net对象æäºè¡ä¸ºåç¨åºçè°è¯å¾æ帮å©
ä¹ï¼.Netä¸çèªå¨åå¾æ¶éæ¯ä»ä¹ï¼å®ç».Netå¹³å°ä¸çç¼ç¨å¸¦æ¥ä»ä¹ååï¼
.Netåå¾æ¶éå¨è´è´£æ´ä¸ª.Netè¿è¡æ¶å管代ç çå ååé ä¸éæ¾ä»»å¡ãå®éè¿ä¸å®çä¼åç®æ³æ¥éæ©æ¶éç对象åæ¶é´ãç¨åºååªæå¨éæ¾å¤§éå管èµæºæ¶å¯ä»¥è¿è¡ç«å³å¼ºå¶åå¾æ¶éï¼å¨éæ¾éå管èµæºæ¶éç¨ç»æ¢åï¼Finalizeï¼æä½æ¥å¤çï¼éè¦å¨ç¨åºè¿è¡ä¸éæ¾çåºè¯¥å®ç°Dispose()æ¹æ³ï¼å¹¶æç¡®è°ç¨ãå ¶å®æ¶é´å°èµæºçåæ¶äº¤ç±.Netåå¾æ¶éèµ·æ¥åã
åï¼.Netçå管(Managed)代ç ä¸éå管(Unmanaged)代ç æä»ä¹ï¼ä»ä»¬çç¼ç æä»ä¹åºå«ï¼
.Netçå管代ç (Managed Code)æ¯æ符åæ®éè¯è¨è¿è¡æ¶(Common Language Runtime)è§èï¼å¨å åä¸åè¿è¡æ¶ä»£ç 代çè¿è¡å å管çï¼çº¿ç¨ç®¡çï¼è¿ç¨ç®¡çï¼ä»£ç 强å¶å®å ¨ç±»åç代ç ãéå管代ç æ对å åï¼æ件ï¼æ°æ®åºçéå管èµæºè¿è¡æä½ç代ç ï¼ä»ä»¬é常ä¸åè¿è¡æ¶ä»£ç 代ç管çï¼æ¯ä¸å®å ¨çã对å管代ç çç¼ç¨åªéä¸æ³¨äºç¼ç¨çé»è¾ï¼å¯¹äºå åçèµæºç管ç交ç±æ®éè¯è¨è¿è¡æ¶(Common Language Runtime)æ¥è´è´£ï¼è对éå管代ç çç¼ç¨ï¼åè¦å¼å人åç²¾å¿è´è´£åç§éå管èµæºçåé ååæ¶å·¥ä½ã
åä¸ï¼ .Netå¹³å°ä¸çå¼åå·¥å ·æåªäºï¼ç®ååå±å°ä»ä¹é¶æ®µï¼
.Netå¹³å°ä¸çå¼åå·¥å ·ç®ååªæ微软å®æ¹çVisual Studio.Netï¼å ¶å®Delphi.Net åLinuxä¸çå¼åå·¥å ·æ£å¨å¼åä¸ãVisual Studio.Netç®åå¤äºæåçBeta2æµè¯ç¶æï¼å®å°å¨å¹´ä¸åå¹´éçVisual Studio.Netçæ¨åºèåå±å°æççä¼ä¸çã
C# .NET面试系列六:ASP.NET MVC
ASP.NET MVC框架
1. MVC中的TempData、ViewBag和ViewData有何区别?
在ASP.NET MVC中,TempData、ViewBag和ViewData用于在控制器和视图间传递数据。区别在于,TempData具有短暂生命周期,ViewBag提供动态数据传递,而ViewData具有强类型访问。
2. MVC框架的机制及各模块的作用是什么?
MVC框架包括模型、视图和控制器。模型负责数据处理,视图呈现数据,控制器处理用户输入和逻辑操作。此分层结构提高代码可读性、可维护性和可测试性。
3. ASP.NET与ASP.NET MVC的关系?
ASP.NET和ASP.NET MVC都是Microsoft开发的Web应用程序框架,ASP.NET MVC基于MVC设计模式,相较于传统ASP.NET Web Forms,提供分离关注点、可测试性、灵活路由等优势。
4. MVC对ASP.NET的好处有哪些?
ASP.NET MVC通过分离关注点、增强可测试性、支持RESTful风格、提供轻量级视图引擎、支持多种前端框架等优势,为开发者构建Web应用程序提供更灵活、高效、易于维护的方案。
5. Razor视图引擎是什么?
Razor是用于在ASP.NET Web应用程序中创建动态Web页面的视图引擎,它结合了C#或VB.NET代码与HTML标记,简化了动态内容的生成,使得开发人员能够更直观地创建动态Web页面。
6. ViewBag和ViewData之间的区别是什么?
ViewBag和ViewData均用于从控制器向视图传递数据,区别在于Bag提供动态、灵活的数据传递方式,而Data则提供强类型访问,选择使用取决于开发者的偏好和具体需求。
7. 什么是sections?
sections在ASP.NET MVC中用于定义和命名布局视图中的可替换内容块,允许在全局布局中定义占位符,并在具体视图中提供实际内容,从而实现布局的模块化和可维护性。
8. 为什么使用html.partial?
Html.Partial用于在视图中呈现部分视图,它提供了模块化、易于维护和关注点分离的优势,使代码结构更清晰,适用于重复使用和高度可重用的代码部分。
9. 什么是partial view?
Partial View是ASP.NET MVC中用于显示页面部分内容的机制,允许将页面分解为可独立管理和重用的组件,提高代码的模块化和可重用性。
. MVC是否适用于Windows应用和Web应用?
MVC设计模式本身不依赖于特定平台或技术,既适用于Windows应用也适用于Web应用。具体实现可能因技术栈和平台而异。
. 在MVC中如何保持Sessions?
在ASP.NET MVC中,使用Session对象在服务器端存储和检索用户状态信息。通过Session对象的Add或[]操作符设置键值对,使用User.Identity对象获取Windows用户信息,确保在不同请求间保持用户状态。
. 已有ASPX,为什么还要Razor?
Razor视图引擎相较于ASPX提供了更简洁、可读性更强的语法,并支持强类型视图、布局和部分视图的更简单集成,提供更好的HTML编写体验,因此在许多项目中被更广泛使用。
. 在MVC中如何执行Windows认证?
通过在Web.config中启用Windows身份验证,配置IIS以支持Windows身份验证,限制访问控制器或动作方法,以及在视图中获取Windows用户信息,实现基于Windows账户的认证。
. 如何在MVC中使用表单认证?
通过配置Web.config以使用表单认证,创建登录页面,处理登录和注销,限制未授权访问,获取用户身份信息,实现基于表单的身份验证。
. MVC中有多少种不同类型的结果类型?
ASP.NET MVC提供多种类型的结果,包括ViewResult、PartialViewResult、RedirectResult、JsonResult、FileResult等,用于表示操作方法的不同执行结果。
. WebAPI是什么?
WebAPI是一种构建和发布HTTP服务的框架,支持RESTful架构,允许应用程序通过HTTP协议提供和消费数据和服务,用于构建面向Web的服务。
. 在MVC中打包和压缩有何用途?
打包和压缩前端资源,如JavaScript和CSS文件,减少页面加载时间和网络传输数据量,提高性能和用户体验。
. Func与Action有何区别?
Func和Action都是委托类型,但Action表示对无参数方法的引用,而Func可以表示对具有参数和返回值的方法的引用,Action仅限于无参数方法。
. 如何解决项目中的高并发问题?
解决高并发问题的方法包括缓存、数据库优化、分布式架构、负载均衡、异步处理、限流和熔断、并发控制、水平扩展和使用CDN,监控和调优,以及灰度发布,根据项目需求综合使用。
. MVC中有哪些注释属性用于验证?
常用的验证注解属性包括Required、StringLength、Range、RegularExpression、EmailAddress、Compare和DataType,用于在模型中添加验证规则。
. ActionResult与ViewResult有何不同?
ActionResult是动作结果的基础类型,而ViewResult是用于表示动作方法返回视图的结果类型之一,ViewResult是ActionResult的一种特殊情况。
. 如何在MVC中执行打包?
通过System.Web.Optimization命名空间提供的功能,配置并执行打包,将多个前端资源合并成一个或多个包,减少页面加载时间和资源请求次数。
. MVC的路由选择过程是什么?
MVC的路由选择通过路由表定义URL模式,根据请求的URL选择匹配的路由,实现灵活的URL映射和处理。
. 在哪里写路由映射表?
路由映射表通常在RouteConfig.cs文件中配置,该文件位于项目的App_Start文件夹下,使用RegisterRoutes方法注册路由规则。
. 在MVC中提到Area的好处是什么?
Area提供模块化、代码分离、独立路由、命名空间隔离、可插拔性和独立部署的优点,有助于构建大型、可管理的MVC应用程序。
. 你能解释一下MVC中的RenderBody和RenderPage吗?
RenderBody用于渲染布局页的主体内容,RenderPage用于嵌套其他视图在布局页中,实现动态内容的嵌套。
. ASP.NET MVC的过滤器有哪些?
ASP.NET MVC中的过滤器包括身份验证过滤器、授权过滤器、操作过滤器、异常过滤器、结果过滤器和资源过滤器,用于在请求处理过程中执行特定操作,提供更细粒度的控制和管理。