You need to enable JavaScript to run this app. ASP.NET Core 双Razor类库同路径视图路由不匹配问题解决
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 双Razor类库同路径视图路由不匹配问题解决

问题核心原因
  • 路径冲突:两个Razor类库中存放的List.cshtml虚拟路径完全一致,视图引擎按照程序集加载顺序匹配第一个检索到的视图,当前加载顺序中Users库的资源优先于Clients库,因此访问Clients路径时返回了Users的视图
  • 逻辑硬编码错误:两个控制器都写死返回同一个公共视图路径,没有通过路径区分视图的所属来源
分步实现方案

1. 重构RCL内的视图存放路径

调整两个Razor视图库的目录结构,保证同文件名称的视图拥有全局唯一的虚拟路径,避免检索冲突:

  • WebPage.Users 库:将List.cshtml调整到~/Areas/Users/Views/List.cshtml路径下
  • WebPage.Clients 库:将List.cshtml调整到~/Areas/Clients/Views/List.cshtml路径下

RCL打包时会以项目根目录为基准生成嵌入资源的虚拟路径,只要路径不重复,就不会出现同名文件的检索冲突

2. 修正控制器的视图返回逻辑

取消两个控制器统一返回公共路径的写法,每个控制器返回对应专属的唯一视图路径:

// Clients 模块控制器
public class ClientsViewController : Controller
{
    public IActionResult Index()
    {
        return this.View("~/Areas/Clients/Views/List.cshtml");
    }
}

// Users 模块控制器
public class UsersViewController : Controller
{
    public IActionResult Index()
    {
        return this.View("~/Areas/Users/Views/List.cshtml");
    }
}

3. 补充视图引擎的资源扫描配置

调整服务注册逻辑,合并重复的MVC初始化流程,确保Razor视图引擎能正确识别两个RCL中嵌入的视图资源:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews()
        .AddApplicationPart(typeof(UsersController).Assembly)
        .AddApplicationPart(typeof(ClientsController).Assembly)
        .AddRazorRuntimeCompilation(opt =>
        {
            // 注册两个程序集的嵌入文件提供器,支持动态检索嵌入视图
            opt.FileProviders.Add(new EmbeddedFileProvider(typeof(UsersController).Assembly));
            opt.FileProviders.Add(new EmbeddedFileProvider(typeof(ClientsController).Assembly));
        });
}

4. 优化路由匹配规则

调整现有端点路由的默认值配置,修正无参数请求下的路由匹配错乱潜在问题:

app.UseEndpoints(endpoints =>{
    // 把默认Action直接写入路由模板占位符,提升匹配稳定性
    endpoints.MapControllerRoute(
        name: "usersViewController",
        pattern: "modules/users/{action=Index}",
        defaults: new { controller = "UsersView" });
    
    endpoints.MapControllerRoute(
        name: "clientsViewController",
        pattern: "modules/clients/{action=Index}",
        defaults: new { controller = "ClientsView" });
});
效果验证

调整完成后,视图引擎会根据每个控制器返回的唯一虚拟路径,精准匹配对应程序集内的视图资源:

  • 请求/modules/clients/时,加载WebPage.Clients程序集下的List.cshtml
  • 请求/modules/users/时,加载WebPage.Users程序集下的List.cshtml

内容的提问来源于stack exchange,提问作者niki.kante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 04:45:03