控制器MyArticle视图返回404错误,寻求排查解决方案
ASP.NET Core Razor视图返回404且MyArticle动作未触发问题排查
问题现象
控制器中MyArticle对应的视图返回404错误,且MyArticle动作存在触发异常,具体表现:
- 浏览器地址不传入id时(
https://localhost:7105/Articles/MyArticle/),MyArticle(long? id)动作可正常激活;硬编码有效id后能成功加载数据库数据,但return View(article)返回空白页。 - 删除并自动重建Razor视图后,问题依旧,仍报404。
- 在解决方案资源管理器右键视图选择「在浏览器中显示」,视图可展示所有无图片数据;替换视图代码后再次操作,视图可正常展示含图片的全部数据。
- 视图通过卡片链接触发调用,代码如下:
<div class="card h-100 mx-2 mt-3" style="width: 16rem;"> <img src="@Url.Content("~")/Upload/@item.VendeurName/@item.Crec_Ref/Thumbnails/@item.FirstImage" class="card-img-top" alt="..." href="#" /> <div class="card-body"> <h6 class="card-title soussoustitre-ajout">@Html.DisplayFor(modelItem => item.Nom)</h6> <p class="card-price title-addition">@Html.DisplayFor(modelItem => item.PublicPrice) €</p> <a href="/Articles/MyArticle/@Html.DisplayFor(modelItem => item.Id)" class="stretched-link"></a> </div> </div>
- 已确认
MyArticle动作与视图名称关联正确。 - Firefox、Brave浏览器测试结果一致。
- 平行开发的项目克隆版本可正常运行。
- 重启电脑后问题未解决。
排查建议
1. 路由规则验证
- 检查
Program.cs/Startup.cs中的全局路由配置,确认是否为MyArticle动作设置了正确的路由模板,比如是否允许id为可选参数,或参数类型约束是否匹配long类型。 - 尝试在
MyArticle方法上显式添加路由特性,强制指定路由规则:[Route("Articles/MyArticle/{id?}")] public IActionResult MyArticle(long? id) { // 方法逻辑 }
2. 参数传递正确性检查
- 查看页面源代码,确认卡片链接中的
@Html.DisplayFor(modelItem => item.Id)是否输出了有效id值,链接格式应为/Articles/MyArticle/xxx(xxx为数字id),避免空值或非数字值导致路由匹配失败。 - 将链接写法替换为框架生成方式,避免手动拼接错误:
<a href="@Url.Action("MyArticle", "Articles", new { id = item.Id })" class="stretched-link"></a>
3. 视图文件验证
- 确认视图文件路径为
Views/Articles/MyArticle.cshtml,且文件属性中「复制到输出目录」设置为「如果较新则复制」或「始终复制」。 - 在返回视图时显式指定视图名称,避免框架查找错误:
return View("MyArticle", article);
4. 请求日志排查
- 启用ASP.NET Core请求日志,查看请求的路由匹配流程,确认是否存在路由冲突或请求被中间件拦截的情况。
- 在
MyArticle方法开头添加日志输出,确认方法是否被触发及参数接收是否正确:_logger.LogInformation("MyArticle动作触发,接收id: {Id}", id);
5. 项目差异对比
- 将当前项目与可正常运行的克隆版本对比,重点检查:
Program.cs/Startup.cs的路由、中间件配置ArticlesController.cs的代码差异- 视图文件的目录结构与属性设置
launchSettings.json中的启动配置
内容的提问来源于stack exchange,提问作者AMP59
相关产品推荐
相关产品推荐

