You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

独立项目ASP.NET路由失效,如何配置解决404访问错误?

解决跨项目控制器路由404问题的配置步骤

1. 确保类库项目类型正确并添加引用

  • 包含Products控制器的项目必须是ASP.NET Core类库(而非普通.NET类库),若不是,右键项目→属性→应用程序,将目标框架改为对应ASP.NET Core版本,输出类型设为"类库"。
  • 在启动主项目中,右键"依赖项"→添加项目引用,勾选包含Products控制器的类库项目。

2. 在主项目中注册类库的控制器

打开主项目的Program.cs,在添加控制器服务的代码里,指定外部控制器所在的程序集:

builder.Services.AddControllersWithViews()
    .AddApplicationPart(typeof(ProductsController).Assembly); // 替换为你的Products控制器类型

这一步能让主项目的路由系统识别到类库中的控制器。

3. 确认主项目的路由配置

检查主项目Program.cs的路由配置,确保启用了控制器路由:

app.UseRouting();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

你的锚点生成的/Products/IndexJson符合默认路由规则,只要控制器被注册,路由就能匹配成功。

4. 处理跨项目视图的加载问题

因为控制器返回View(),默认会在主项目的Views/Products/IndexJson.cshtml查找视图,若视图在类库中,需做以下配置:

  • 在类库项目中创建Views/Products/IndexJson.cshtml,然后修改类库的.csproj文件,添加配置让视图嵌入程序集:
<ItemGroup>
    <EmbeddedResource Include="Views/**/*.cshtml" />
</ItemGroup>
  • 回到主项目的Program.cs,配置视图引擎加载嵌入的视图:
builder.Services.AddControllersWithViews()
    .AddApplicationPart(typeof(ProductsController).Assembly)
    .AddRazorRuntimeCompilation() // 开发环境可选,实现视图实时编译
    .AddEmbeddedViewsForAssembly(typeof(ProductsController).Assembly);

5. 验证锚点标签的有效性

页面渲染后查看源码,确认<a>标签的href属性为/Products/IndexJson,若生成异常,可显式补充标签内容:

<a asp-controller="Products" asp-action="IndexJson">查看产品JSON视图</a>

完成以上配置后重启主项目,点击锚点即可正常访问类库中控制器的视图。

内容的提问来源于stack exchange,提问作者pikk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:01:17