WebForms 自定义/动态路由

2023-12-14

我在用着菲尔·哈克的WebForms 的 URL 路由,我想定义一个“动态”的路由。假设我有这条路线:

“{any}.aspx”--转到-->“~/PageProcessor.aspx”

这会将任何非物理页面的请求发送到 PageProcessor 页面。这很好用。问题是,根据来自数据库的一些数据,我需要将某些页面路由到不同的处理器,例如 DifferentPageProcessor.aspx。我无法定义捕获所有 .aspx 文件的新路线,因为第一个路线捕获所有内容。

因此,在“路由器”决定将请​​求发送到 PageProcessor 并根据需要将其分叉到 PageProcessor 或 DifferentPageProcessor 之前,我需要一种方法来处理请求。这可能吗?

Thanks.


我的解决方案(除非有人提出更优雅的解决方案)是修改 WebFormRouting 项目中的 WebFormRouteHandler 类以接受自定义谓词。

public WebFormRouteHandler(string virtualPath, bool checkPhysicalUrlAccess, Func<RequestContext, string> custom)

然后在类中,我将自定义参数存储到私有 CustomVirtualPath 属性中。要使用它,我必须将 GetSubstitutedVirtualPath 更改为:

public string GetSubstitutedVirtualPath(RequestContext requestContext)
{
  string path = VirtualPath;

  if (CustomVirtualPath != null)
  {
    path = CustomVirtualPath(requestContext);
  }

  if (!path.Contains("{")) return path;

  //Trim off ~/
  string virtualPath = path.Substring(2);

  Route route = new Route(virtualPath, this);
  VirtualPathData vpd = route.GetVirtualPath(requestContext, requestContext.RouteData.Values);
  if (vpd == null) return path;
  return "~/" + vpd.VirtualPath;
}

对于要编译的项目,我们需要更改 WebFormRoute 和 WebFormRouteExtensions 以允许自定义参数沿链传递。完成后,我可以在 global.asax.cs 中编写此内容

routes.MapWebFormRoute("All", "{any}.aspx", "~/", false,
                         context =>
                           {
                             return ((string)context.RouteData.Values["any"] == "test"
                                       ? "~/PageProcessor.aspx"
                                       : "~/DifferentPageProcessor.aspx");
                           });

当然,lambda 表达式的主体应该从其他地方(数据库或缓存)查找 URL。

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

WebForms 自定义/动态路由 的相关文章

  • 比较 2 个 linq 应用程序:意外结果

    我起草了2 ASP NET应用程序 using LINQ 一个连接到微软SQL服务器 另一个对某些专有内存结构 这两个应用程序都可以使用以下表格3 个 int 字段 有500 000 条记录 内存结构与 SQL Server 表相同 使用的
  • 如何将 GWT 与 Visual Studio 一起使用来创建 ASP.NET 网站?

    如何将 GWT 与 Visual Studio 一起使用来创建 ASP NET 网站 如果可能 GWT 可以与任何后端一起使用 只需做一些工作 它开箱即用 使用 servlet 容器 但您不需要保留此容器 容器中的关键项是加载GWT编译代码
  • 带有 CosmosDBTrigger 的 Azure 函数似乎不是由 upsert 触发的

    我是第一次使用 Azure Functions 我正在尝试编写一个简单的函数来响应更改或添加到 CosmosDb 集合中的文档 我写的函数如下所示 FunctionName ChangeLog public static void Run
  • asp.net 检查 imageURL 是否存在

    我正在尝试从另一个 Intranet 站点获取用户的缩略图 但其中一些不遵循预定义的格式 这意味着我想加载默认的缩略图 检查图像 URL 是否有效的最佳方法是什么 根据您获取图像的方式 此方法的变体可能会起作用 img src alt My
  • 会话变量由于某种原因丢失

    我尝试建立一个电子商店 每件物品旁边都有一个asp imagebutton单击此图像按钮时 我正在检查会话变量是否session basket 是否存在 如果不存在 则我将值添加到列表 实体类 中 然后在会话中添加此列表 如果会话不为空 那
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • Web.config 在 Azure 部署期间发生(大幅)更改

    部署到 Azure 后 我不断收到服务器错误 应用程序无法运行 所以我在实例中做了一个远程桌面 发现 web config 被彻底修改了 这是怎么回事 我以为 web config 是按原样打包的 相反 整个配置已被替换 当我用原始的 未改
  • 在 ServiceStack 中使用 ASP.NET 成员资格

    我该如何使用ASP NET 会员资格 in 服务栈 http www servicestack net ServiceStack OrmLite ServiceStack Host AspNet 等 您可以将 ServiceStack 托管
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 实体框架中对象属性中的 NULL 值

    Tables Article Author Comment 1篇文章和1位作者可以有 评论 数据库中有 1 篇文章 1 位作者和 1 条评论 问题是 该代码 myBD my bd new myBD var articles by bd Ar
  • 访问动态创建的控件 (c#)

    在我的代码后面 c 中 我动态创建了一些RadioButtonList 每个RadioButton中有更多RadioButton 我将所有控件放在一个特定的面板中 我需要知道的是稍后如何访问这些控件 因为它们不是在 aspx 文件中创建的
  • PetaPoco 数据库类应该在每个请求时创建一次还是在每次需要时创建?

    对于 PetaPoco 我应该如何处理创建Database班级 我的应用程序可能会利用各种存储库 不完全是 DDD 存储库 更像是网关存储库 来封装查询 由于我将有多个需要访问同一数据库连接的存储库 因此我正在考虑创建一个基类 在构造函数中
  • .net Framework 4.0 中地理 SQL Server 数据类型的 C# 等效项是什么?

    net web应用程序使用 net 4 0框架 我有一个存储过程 它接受 sql server 2008 R2 中的地理数据类型 我想将 C 代码中的数据插入 SQL Server 但我无法找到应在 C 中使用哪种与 SQL Server
  • 如何获取 ASP.NET MVC 中当前的虚拟路径?

    如何从 ASP NET MVC 视图中获取当前路径 URL 如果没有办法将其获取到视图中 那么如何将其获取到控制器中以便将其传递到视图呢 EDIT 我不需要 url 的协议和主机部分 这将为您返回视图中的 url
  • EnableEventValidation="false" - 好主意吗? [复制]

    这个问题在这里已经有答案了 可能的重复 的目的 https stackoverflow com questions 1503630 purpose for pages enableeventvalidation false 我还有另一个相关
  • 相当于 C# 中的 $_FILES

    C 中 PHP 的 FILES 变量相当于什么 或者至少以相同的方式访问文件 我有一个无法更改的上传表单 需要了解如何获取这些文件 看一眼Request Files 例如 foreach HttpPostedFile item in Req
  • 如何从网站的 .NET 安装程序中排除文件夹?

    我们的网站有一个安装程序 效果很好 我在创建安装程序时排除了 web config 和其他一些文件 但是我似乎无法排除文件夹 这可能吗 我已使用 NET 内置 Web 安装项目创建了安装程序 该项目可在新项目对话框中的 Visual Stu
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多

随机推荐