asp.net mvc 按名称和区域查找控制器

2024-03-21

我的目标是从控制器的名称和区域中找到控制器。如果我当前的httpContext与待找到的控制器位于同一区域内。但是,我无法拨打电话ControllerFactory考虑面积。这是我的代码:

public static ControllerBase GetControllerByName(this HtmlHelper htmlHelper, string controllerName)
    {
      IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
      IController controller = factory.CreateController(htmlHelper.ViewContext.RequestContext, controllerName);
      if (controller == null)
      {
        throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "The IControllerFactory '{0}' did not return a controller for the name '{1}'.", factory.GetType(), controllerName));
      }
      return (ControllerBase)controller;
    }

由于它需要一个RequestContext作为参数,我向其中添加了“区域”的路线值,但没有任何更改。我可以用 requestContext 做一些事情来考虑区域吗?我是否需要覆盖控制器工厂 - 如果需要,具体是什么处理区域区分?

Update:

这是我的区域注册的示例:

public class StoresAreaRegistration : AreaRegistration
  {
    public override string AreaName { get { return "Stores"; } }

    public override void RegisterArea(AreaRegistrationContext context)
    {
      context.MapRoute(
          AreaName,
          AreaName + "/{controller}/{action}/{id}",
          new { area = AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
  }

The Area and Namespaces used to locate a controller are in the RouteData of the RequestContext. They are populatd by default based off of the request you are currently serving up, if you need to change them you have to do so before calling CreateController. You may get an exception when a controller cannot be found so you'll have to account for that as well.

UPDATE:注意,您必须创建一个新的RequestContext。如果您重复使用现有的,它将扰乱此请求中稍后的操作和视图的解析。

var tempRequestContext = new RequestContext(Request.RequestContext.HttpContext, new RouteData());
tempRequestContext.RouteData.DataTokens["Area"] = "";
tempRequestContext.RouteData.DataTokens["Namespaces"] = "YourCompany.Controllers";
var controller = ControllerBuilder.Current.GetControllerFactory()
                .CreateController(tempRequestContext, "ControllerName");

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

asp.net mvc 按名称和区域查找控制器 的相关文章

随机推荐

  • Swift 中的 NSExpression 计算器

    我正在尝试复制需要用Objective C写计算器 https stackoverflow com questions 15090475 need to write calculator in objective c在 Swift 中 但我
  • 使用 ArrayList 将文本文件拆分并存储到数组中

    我一直在开发一个测验应用程序 它使用文本文件来存储问题 问题的格式如下 QUESTION CHOICE A CHOICE B CHOICE C CHOICE D ANSWER 我希望它读取每一行并将其分成 6 个不同的部分 作为分割字符串并
  • 为什么这个 Flexbox 布局在 Safari 中会被破坏?

    所以我在 CSS 中设计了这个 想法是有一个标题 其余部分作为可滚动内容 有一个链接到现场演示在底部 Alas in Safari it is broken and looks like this 可以看到 表头的高度计算错误 导致绿框溢出
  • 与 React 一起使用时如何检测 keyPress 上的“Enter”键

    我正在使用 ReactJs 来开发我的应用程序 我试图通过处理 onKeyPress 事件在按下 Enter 时提交输入文本 它检测其他输入 但不输入 我尝试过不同的方法 event key event charCode event key
  • Cassandra RandomPartitioner 版本 1.2.3

    我使用 apt 在 debian 上安装 Cassandra 1 2 3 我之前使用的是 tarball 1 1 7 安装 安装后 我将 cassandra yaml 中的分区器从 Murmur3Partitioner 更改为 Random
  • Expo.FileSystem.downloadAsync 不显示下载通知

    我正在使用世博会FileSystem下载 pdf 文件 API 响应进入 success 函数 但是 我无法向用户显示下载的文件 预期的行为应该就像我们通常在状态栏上看到通知图标一样 单击图标会打开您的文件 FileSystem downl
  • DNS 服务器管理的域列表[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们有一台运行 Ensim 的服务器 这是一个类似 Plesk 的旧工具 让我们的行为就像是一个网络主机一样 多年来 我们慢慢退出了托管业务 但我们的
  • Oracle默认的日期格式是YYYY-MM-DD,为什么?

    Oracle 的默认日期格式是 YYYY MM DD 这意味着如果我这样做 select some date from some table I lose我约会的时间部分 是的 我知道你可以通过以下方式 解决 这个问题 alter sess
  • 是否可以获得“this”指针的地址?

    我读到了this是一个右值 我们无法通过应用来获取它的地址 this 在我的代码中 我尝试使用引用绑定this 我想知道哪种方式可以给出地址this 还是两者都错了 到底是什么this 左值 右值 关键字还是其他什么 void MyStri
  • 数独求解算法 C++

    我花了几天时间尝试制作一个数独解决程序 但我被这些方法所困扰 我在这里找到了这个算法 但我不太理解它 从第一个空单元格开始 并在其中输入 1 检查整个板子 看看是否有冲突 如果板上存在冲突 请将当前单元格中的数字加 1 因此将 1 更改为
  • SQL NOT IN 可能存在性能问题

    我正在尝试重构几段旧代码 我已经重构了下面的当前代码并突出显示了NOT IN语句导致性能问题 我正在尝试重写NOT IN具有左外连接的部分 如果可能的话 任何人都可以帮忙 或者建议更好的方法吗 SELECT left unique id 1
  • 有没有流畅的WPF项目? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 作为我不断尝试使用 WPF XAML 的一部分 我对 UI 编码中流畅界面的应用产生了兴趣 我知道 Fluent Silverlight http c
  • 在 BeforeClose 事件期间保存 Word 文档时,并不总是触发 Shutdown 事件

    我有一个 Microsoft Word 插件 使用VSTO and c 对于每个文档 我使用文档 ShutDown 事件来清理我的父对象 并使用 BeforeClose 事件来对我的父对象进行预关闭验证 我的验证需要保存文档并尝试在 Bef
  • 在 Android 中选择 EGL 配置的正确方法是什么?

    我正在使用自己的 GLSurfaceView 并且一段时间以来一直在努力解决与 EGL 配置选择器相关的崩溃问题 似乎通过调用请求 RGB 565setEGLConfigChooser 5 6 5 0 16 0 应该是最受支持的 然而 使用
  • 上课需要记忆吗?

    class Test int x int main cout lt lt sizeof Test return 0 输出 4我只是想问 即使我没有创建 Test 类的任何对象 为什么它会打印 4 sizeof X 是字节数X创建时需要 致电
  • 使用 Apache AGE 制作最短路径

    我一直在阅读 Jasper Blues 的博客文章 使用 NEO4J 进行摇滚式流量路由 https medium com neo4j rock n roll traffic routing with neo4j 3a4b863c6030但
  • 我应该如何在 axios GET 请求中发送 JWT 令牌? [复制]

    这个问题在这里已经有答案了 我是 Vue js 新手 想要在组件中向受限 api 发出请求 computed token return this store getters getToken created axios get this B
  • 函数构造函数和原型构造函数有什么区别?

    我想知道这有什么区别 MyClass function MyClass prototype Foo function and this MyClass MyClass prototype constructor function MyCla
  • 如何在androidsharedPreference中存储类对象?

    我想将类对象存储在android共享首选项中 我对此进行了一些基本搜索 得到了一些答案 例如使其可序列化对象并存储它 但我的需求非常简单 我想存储一些用户信息 例如姓名 地址 年龄和布尔值是否处于活动状态 我为此创建了一个用户类 publi
  • asp.net mvc 按名称和区域查找控制器

    我的目标是从控制器的名称和区域中找到控制器 如果我当前的httpContext与待找到的控制器位于同一区域内 但是 我无法拨打电话ControllerFactory考虑面积 这是我的代码 public static ControllerBa