ASP.NET Core 7 MVC中GetAllAsync命名致视图空白,是否为已知Bug?
以下是几种可能导致GetAllAsync方法及对应视图返回空白,改名后恢复正常的原因:
路由或内置约定冲突:ASP.NET Core MVC有默认的路由匹配和动作方法约定,
GetAllAsync的命名可能和框架内部规则、第三方中间件/扩展的命名逻辑冲突,导致请求没有正确映射到目标视图。比如部分扩展库会对含GetAll、Async的方法做特殊拦截,干扰了正常的视图渲染流程。视图查找优先级问题:框架查找视图会按
Views/[控制器名]/[动作名].cshtml→Views/Shared/[动作名].cshtml的顺序搜索。如果Shared目录下存在同名的GetAllAsync.cshtml且内容为空,就会优先加载这个空白视图。改名后避开了这个同名文件的优先级匹配,正确加载了你编写的视图。异步方法的特殊处理逻辑:虽然.NET Framework和ASP.NET Core都支持异步动作,但Core对
Async后缀的方法可能有隐式处理差异。比如某些场景下,框架会对命名含Async的方法做额外的异步校验,若你的方法存在细微的异步实现问题(比如未正确等待异步操作),可能导致视图渲染中断。改名后绕过了这个特殊校验逻辑。编译缓存残留:ASP.NET Core的视图编译和缓存机制比.NET Framework更激进,即使重建项目,IDE或发布目录的旧缓存文件可能未彻底清除。改名后生成了全新的编译单元,避开了缓存导致的视图加载异常。
保留命名冲突:
GetAllAsync可能和ASP.NET Core内部API、路由模板的保留命名,或是你引用的第三方包中的方法名重复,导致请求被错误处理,无法正常渲染视图。
内容的提问来源于stack exchange,提问作者yi1fan2

