独立项目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
相关产品推荐
相关产品推荐

