MVC 自定义路由。 DataTokens["Namespaces"] 被忽略

2024-05-01

我不知道为什么在创建时CustomRoute它继承自Route, 场DataTokens["Namespaces"]被忽略。

我收到错误:发现多种类型与名为“Home”的控制器匹配。如果服务此请求的路由 ('{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。这是示例:

应用程序_启动()

 public static void RegisterRoutes(RouteCollection routes)
 {
        //Create dataTokens object
        var dataTokens = new RouteValueDictionary();
        var ns = new[] {"MvcDomainRouting.Controllers.Delivery" };
        dataTokens["Namespaces"] = ns;

        //Note is a custom route
        routes.Add("DomainRoute", new DomainRoute(
            domain:"delivery.md",                                            // Domain with parameters
            url:"{action}/{id}",                                             // URL with parameters
            defaults: new { controller = "Home", action = "Index", id = "" },// Parameter defaults
            constraints:null,
            dataTokens: dataTokens,
            routeHandler:new MvcRouteHandler()
        ));
}  

域路由.cs

public class DomainRoute : Route
{
    public string Domain { get; set; }

    public DomainRoute(string domain, string url, object defaults, object constraints,object dataTokens, IRouteHandler routeHandler)
        : base(url, new RouteValueDictionary(defaults), new RouteValueDictionary(constraints), new RouteValueDictionary(dataTokens), routeHandler)
    {
        Domain = domain;
    }

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        //Details ommited

        // Route data
        RouteData data = new RouteData(this, RouteHandler);

        // 1.Add defaults
        // 2.Map URL key/values
        // Copy the DataTokens from the Route to the RouteData
        if (DataTokens != null)
        {
            foreach (var prop in DataTokens)
            {
                data.DataTokens[prop.Key] = prop.Value;
            }
        }

        return data;
        // At this point `data` holds the DataTokens["Namespaces"] see picture
    }

}

The stack trace from return data;: enter image description here

HomeController.cs

namespace MvcDomainRouting.Controllers.Lunch
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

namespace MvcDomainRouting.Controllers.Delivery
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("Index din delivery");
        }

        public ActionResult About()
        {
            return Content("About din delivery");
        }
    }
}

预先感谢每一位分享经验的人。

If more details need please ask.

问题是我正在创建一个RouteValueDictionary of RouteValueDictionary.

这是固定版本:

像这样:

public DomainRoute( ...,object dataTokens,...)
    : base(...,dataTokens as RouteValueDictionary ,...)
//  instead of
//  : base(...,new RouteValueDictionary(dataTokens),..)
{
    Domain = domain;
}

或者像这样

        //....
        constraints:null,
        namespaces: new []{"MvcDomainRouting.Controllers.Delivery" },
        routeHandler:new MvcRouteHandler()
    ));

    public DomainRoute( ...,string[] namespaces,...)
    : base(...,new RouteValueDictionary(){{"Namespaces",namespaces}} ,...)
    {

    }  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 自定义路由。 DataTokens["Namespaces"] 被忽略 的相关文章

  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • Git checkout 分支从其他分支留下目录树

    我有一个branch2 其源是branch1 并重命名了源自branch1 的目录 当签出branch1时 重命名的目录仍然存在 但没有标记为未暂存的修改 重命名的目录当然不会作为branch1 上的提交出现 为什么会出现这种情况 上述目录
  • 如何在代码中设置 DataGridTextColumn 的绑定?

    我正在使用 CodePlex 的工具包 DataGrid 我正在代码中生成列 我怎样才能设置相当于 绑定名字 在代码中 或者 我怎样才能设置值 这就是我需要做的 不一定要绑定它 我只想要数据网格单元格中模型属性的值 DataGridText
  • IE9 SmartScreen 过滤器警告

    我的公司开发了一款 IT 基础设施管理软件 我们主要在乌克兰使用该软件 我们的客户端应用程序安装程序可以从我们的 FTP 服务器下载 每当有人从我们的 FTP 下载 Install msi 时 IE9 都会告诉用户该软件包不常被下载 因此可
  • 具体5-如何在php中通过ajax获取上传的文件

    我正在尝试通过ajax上传多个文件 但我不知道如何在PHP中获取上传的文件 我发送给他们 var attachments attachment file var post data new FormData if attachments l
  • .Net Framework 4.8 和 .Net 5 之间的垃圾收集行为差异

    为了在已经发生很多次的地方检测潜在的内存泄漏 我使用了如下所示构建的测试 主要思想是拥有一个实例 不再引用它并让垃圾收集器收集它 我不想关注这是否是一种好的技术 在我的具体情况下它做得非常出色 但我想关注以下问题 下面的代码在 Net Fr
  • size_t 总是无符号吗?

    如标题 size t 始终无符号 即size t x is x always gt 0 Yes It s usually定义如下 在 32 位系统上 typedef unsigned int size t 参考 C 标准第 18 1 节定义
  • Code First 从 int 迁移到 Guid 主键问题

    我正在尝试将代码第一个 ID 列从 int 更改为 Guid 当尝试运行迁移时 我收到以下消息 Identity column CustomFieldId must be of data type int bigint smallint t
  • 将 Flask_login 会话与 jinja2 模板一起使用

    我有简单的 jinja2 模板 带有注册 登录链接 我应该在用户登录时隐藏它们 我还使用flask login 模块来处理这个东西 问题是 我应该如何识别用户是否已登录 jinja2 模板 Flask Login 添加了current us
  • Flex DataGrid:根据另一个值更改值?

    我在 Flex 中有一个 DataGrid 其中一列是复选框 另一列是数值 单击该复选框时 数值应更改 如果未选中该复选框 则数值应更改为 0 如果选中该复选框 则应更改为预定义的最小值 这是我的代码
  • 如何对 SQL 查询进行单元测试?

    我有课DBHandler它接受一个查询 通过 SQL Server 运行它 检查错误并返回结果 我如何对这个类进行单元测试 Edit 我会尽量说得更准确 DBHandler负责将查询传递到服务器 为了测试它是否确实做到了这一点 抛出正确的异
  • 如何测试 Windows (10) 上是否安装了 Python,如果未安装则运行 exe 来安装它?

    仅当第一个命令失败时 我才需要在 Windows cmd 上运行第二个命令 在另一个场景中 我想在检查 python setup 是否安装后打开它 我用了这个命令 python version path to python install
  • 在 Mac 上查找(并杀死)锁定端口 3000 的进程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何找到 并终止 侦听 使用我的 TCP 端口的进程 我在 macOS 上 有时 在崩溃或出现一些错误后 我的 Rails 应用程序会锁定
  • 如何使用 Google 表格中多个选项卡的值创建电子表格下拉列表

    想象一下电子表格 Google Spreadsheet 鉴于我有多个选项卡 每个选项卡都有一个名称 可能有 60 80 个选项卡 我想在首页上创建一个下拉菜单 在其中可以看到工作簿中每个选项卡的 它可能看起来像这样 Selected
  • 如何仅将列表中每个字符串的标题大写?

    整个问题 编写一个函数 该函数将字符串列表作为参数 并返回一个包含每个大写字符串作为标题的列表 也就是说 如果输入参数是 apple pie brownies chocolate dulce de leche eclairs 你的函数应该返
  • 在外部 div 悬停时将样式应用于内部 div [重复]

    这个问题在这里已经有答案了 我有一些看起来像这样的 HTML div class TheOuterClass div class TheInnerClass some text div div 使用以下 CSS TheOuterClass
  • 将鼠标悬停在 R 中的传单时弹出?

    我的传单地图看起来像这样 library sp library leaflet circleFun lt function center c 0 0 diameter 1 npoints 100 r diameter 2 tt lt seq
  • 如何以非交互方式指定“psql”的密码?

    我正在尝试使用 shell 脚本自动执行数据库创建过程 但我遇到了向其传递密码的障碍psql https en wikipedia org wiki PostgreSQL Database administration 下面是 shell
  • 如何从屏幕上的任意位置拖动底页?

    我正在尝试实现类似 YouTube 的体验 并允许用户从屏幕中的任何位置拖动底部工作表 我尝试了很多解决方案没有任何帮助 我终于从这个解决方案中找到了解决方案在外部区域达到阈值后允许 BottomSheet 向上滑动 https stack
  • ASP.NET 中的大数组支持

    最近有了 4 5 NET 支持 用户可以为一个对象分配超过 2 GB 的内存 为了做到这一点 用户可以在 app config 文件中将 gcAllowVeryLargeObjects 设置为 true 一切都会正常工作 但是我很难找到 A
  • MVC 自定义路由。 DataTokens["Namespaces"] 被忽略

    我不知道为什么在创建时CustomRoute它继承自Route 场DataTokens Namespaces 被忽略 我收到错误 发现多种类型与名为 Home 的控制器匹配 如果服务此请求的路由 action id 未指定命名空间来搜索与请