使用和不使用查询字符串路由旧请求

2024-04-22

(开始之前:我知道this https://stackoverflow.com/q/7395841 and this https://stackoverflow.com/q/817325。我想找到一个更简洁的解决方案 - 如果可能的话 - 对于一个稍微更具体的问题)

我正在 MVC 中重写一个旧的 Webforms 应用程序。像往常一样,不应破坏任何永久链接。

我正在使用标准{controller}/{action}/{id}路线。遗留路径通常是SomePage.aspx?ID=xxx,我有一个特殊情况Foo.aspx是一个列表Bar(新网址:/Bar or /条形图/索引) and Foo.aspx?ID=xxx is the Bar详细信息(新网址:/栏/视图/xxx)

一种可能的解决方法是在默认值之前添加以下内容MapRoute:

routes.MapRoute("Bar View", "Foo.aspx",
                new { controller = "Bar", action = "View" });

然后在BarController中定义相应的action:

public ActionResult View(int? id)
{
    if (id == null)
        return RedirectToAction("Index");
    return View();
}

这样做有两个问题:

  • 现在,如果我创建一个 ActionLink,它会使用旧格式
  • 我想在路线中处理这个问题;使 id 可为空并在控制器中重定向是错误的

我可以手动映射旧版 URL(我不需要通用解决方案,而且只有大约 8 页)

这是一个新项目,所以我不受任何事情的束缚。


我能够根据危险的想法 https://stackoverflow.com/a/9166539加上一个基于的约束这个答案 https://stackoverflow.com/a/5066466/62024.

我的新路由表是:

routes.MapRoute("Bar", "Bar/{action}/{id}",
                new
                {
                    controller = "Bar",
                    action = "Index",
                    id = UrlParameter.Optional
                });
routes.MapRoute("Bar View", "Foo.aspx",
                new {controller = "Bar", action = "View"},
                new {id = new QueryStringConstraint()});
routes.MapRoute("Bar Index", "Foo.aspx",
                new { controller = "Bar", action = "Index" });
routes.MapRoute("Default", /*...*/);

QueryStringConstraint 再简单不过了:

public class QueryStringConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route,
                      string parameterName, RouteValueDictionary values,
                      RouteDirection routeDirection)
    {
        return httpContext.Request.QueryString.AllKeys
            .Contains(parameterName, StringComparer.InvariantCultureIgnoreCase);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用和不使用查询字符串路由旧请求 的相关文章

  • 使用模型优先方法时如何播种数据?

    所以我正在学习MVC3和EF4 我尝试了代码优先方法 但它对我来说太混乱了 我可以毫无问题地创建类 但最困难的部分是处理外键和彼此之间的关系 但我首先选择了模型 这样我就可以直观地设计它并查看关系在哪里 创建模型后 它会为我创建一个 SQL
  • ASP.NET MVC - ValidateAntiForgeryToken 过期

    在网页中 我们提供一个超链接 GET 用户可以单击该超链接进行身份验证 Html ActionLink Please Login MyMethod MyController 这映射到以下返回视图的控制器方法 RequireHttps pub
  • 如何在 MVC 3 Razor 中显示解码后的编码 HTML?

    我在 MVC 3 和 Asp net C 中使用 Razor 我有一个带有以下代码的视图 model ContentBody有一些 HTML 标签 我需要将此 HTML 内容显示为DECODED 我该如何更改视图中的代码 div class
  • 如何为 Html.BuildUrlFromExpression 调用指定默认区域

    我有这样的问题链接文本 https stackoverflow com questions 2345293 how to specify default area without adding area to every actionlin
  • 在asp.net mvc 3项目中渲染部分视图onclick

    在我的 mvc 项目中 我有一个简单的项目列表 其中包含如下的增删改查操作 tbody foreach var item in Model tr td item Title td td item Body td td item Price
  • 将模型从一个动作传递到同一控制器中的另一动作

    我正在尝试通过我的模型List 语句列表从一个操作到另一个操作 但我在第二个控制器中收到空值 请提出这里有什么问题 甚至尝试过 return RedirectToAction WriteInTemplate new statementLis
  • 果园:自定义注册字段

    对于我的 Orchard 项目 我需要用户在注册时提供一些附加信息 说 名字 姓氏 裤子颜色 此信息必须在注册时输入 并且不能推迟到以后 根据客户的订单 我尝试使用配置文件和扩展注册插件来请求这些 但据我所知 这只为我提供了在注册表中显示的
  • ModelBinding asp.net MVC 列表

    我有以下课程 public class Movie string Name get set string Director get set IList
  • 创建新控制器时出现错误:“不支持的上下文类型”

    我将使用 ASP NET MVC3 Linq to Sql 类 而不是实体框架 MS SQL Server 2008 pro 而不是 Express ed 来实现 MvcMusicStore 我从那里得到了教程mvcmusicstore c
  • 为什么要调用base.OnActionExecuting(filterContext);?

    我只是在看我的一些旧代码 我有一个动作过滤器 OnActionExecuting 方法 最后我有 base OnActionExecuting filterContext 为什么到处搜索我都看到这个很多次了 我还看到 在我的旧授权标签中 我
  • 如何使用 DropDownListFor

    我想向网页添加下拉列表 html 控件 并用产品列表填充它 我的动作控制器看起来像 public ActionResult Index return View repository GetProducts true 产品模型 Linq to
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 如何告诉 razor 不要 html 转义

    我在一个项目中使用 asp net mvc 3 和 razor 在某些情况下 我需要从控制器序列化数组 将其放入视图数据中并将其分配给 js 对象 但是当我使用它输出时 ViewData some array 结果是 html 转义所以我得
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • 绑定到 ViewModel 时如何更新 Model?

    我有一个 HttpPost 操作方法签名如下 HttpPost public ActionResult Edit ExistingPostViewModel model Save the edited Post 现在 在过去 当我没有使用
  • 如何使用 Error.cshtml 视图中的过滤器放入 ViewBag 的数据?

    我有一个操作过滤器 负责将一些通用信息放入 ViewBag 中 供共享 Layout cshtml 文件中的所有视图使用 public class ProductInfoFilterAttribute ActionFilterAttribu
  • OutputCache 因复杂对象属性而异

    我有一个控制器操作 它接收一个复杂对象作为参数 我需要 OutputCache 根据该复杂对象的属性之一而变化 这可能吗 如何 如果你有一个像这样的模型 public class person public string Name get
  • 我如何将整数列表添加到路由

    我正在尝试将 int 数组添加到我的 Url Action 中 如下所示 var routeData new RouteValueDictionary for int i 0 i lt Model GroupsId Length i rou
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 脚本标签内的 Razor RenderSection - 如何将脚本从视图插入模板函数

    我正在使用 MVC 3 和 Razor 视图引擎 我想将多个视图中的脚本注入到一个集中定义的视图中 document ready 母版页中的功能 我已经尝试过以下方法 在我的大师看来 然后 section DocumentReady ale

随机推荐

  • 如何匹配空手道中嵌套 json 对象中的动态键?

    尝试匹配空手道框架中 API 响应中的嵌套 json 对象 以下是我的 API 响应 status code 0 message Successful data PHX name Phoenix All city code PHX coun
  • 什么时候函数名太长?

    在可能的情况下 我尝试对我的函数名称进行描述 这有时会导致函数名称在二十到三十个字符范围内 例如GetActionFromTypeName or GetSelectedActionType 在什么时候函数会变得太长而难以管理 对于编译器来说
  • django - 登录视图没有反向匹配

    我只是尝试 d jango 并按照文档进行身份验证 基本上我想看一下用户登录表单页面 但我得到 Caught NoReverseMatch while rendering Reverse for django contrib auth vi
  • 如何在 Rails 3 中使用 Draper 修饰嵌套属性(关联)?

    我的环境 Rails 3 2 with draper https github com jcasimir draper gem 我正在使用嵌套资源 并且无法确定在哪里声明装饰器 app controllers users controlle
  • Chart.js如何获得组合条形图和折线图?

    我想问一下使用 Chart js 是否可以http www chartjs org http www chartjs org 获得组合条形图和折线图 感谢您的任何建议 下面的答案与 Chart js 1 x 有关 Chart js 2 x
  • Facebook 如何在不重新加载页面的情况下更改 url? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不重新加载和 hack 的情况下更改 Windows 位置 https stackoverflow com questions 3997181 how could i change window
  • 如何从用户列表中查找PC

    我需要一些帮助 我不太确定这是否可能 我有清单samAccountName in csv文件 我需要从中获取他们的 PC 名称和 IP 我不太确定如何构建这样的脚本 一种方法是循环访问环境中的所有计算机并测试每台计算机 这当然会是SLOW
  • 泛型显式转换

    我实现了从字符串到名为 Foo 的对象的显式转换 所以 gt Foo f Foo foo 数据 作品 我需要实现一个将字符串转换为通用 T 的函数 在本例中 T 是 Foo 数据类型 public T Get
  • 宏的问题

    HI 有人可以帮助我理解为什么 SQUARE x 的值为 49 吗 我正在使用 Visual C 6 0 define SQUARE X X X int main int argc char argv int y 5 printf d n
  • 如何在 SwiftUI 中为按下时的导航链接设置动画?

    我试图通过在按下 NavigationLink 时提供一些反馈来改进用户体验 我的意思是一个简单的动画 它会增长然后缩小链接以显示它被按下或以任何其他方式提供反馈 这是我正在尝试改进的代码 NavigationLink destinatio
  • 在 C++ 中与 VARIANT 类型相互转换的简单方法

    有没有便于使用 高级类或库让您可以与VARIANT在 Visual C 中 更具体地说 我想在 POD 类型之间进行转换 例如double long 字符串 例如CString 和容器 例如std vector and VARIANTs 例
  • 如何使argparse在可执行程序中工作

    我有一个使用 argparse 模块的命令行脚本 import argparse def run print Running def export print Exporting def argument parser parser arg
  • 连接两个整数并将结果作为 SQL 中的字符串

    在表中 2 个字段 ID 为 int Number 为小 int 我想连接这两个字段并显示为字符串 eg ID 101 and Number 9 output 101 9 ID 和 Number 之间要加点吗 如何用SQL进行查询 You
  • 按日期订购 asp.net MVC 5

    我有一个创建新闻条目并显示 10 条新闻的应用程序 它应该显示 10 条 最新 新闻 现在它显示 10 个最旧的新闻 我该如何更改它 我是否更改控制器以便数据按日期排序 或者我可以在视图中执行吗 控制器 public ActionResul
  • postgres 检测零的重复模式

    有没有办法在 Postgres 的时间序列中检测长度至少为 3 的零子序列 year value 1 0 2 0 3 0 4 33 5 72 6 0 7 0 8 0 9 0 10 25 11 0 12 56 13 37 因此 在此示例中 我
  • 从链接服务器插入存储过程的结果

    是否可以将远程存储过程的结果插入到临时表中 例如 CREATE TABLE test id INT INSERT INTO test EXEC linkedserver remoteDB dbo tst DROP TABLE test 其中
  • Textview 在 Imageview 上滚动,就像 Pulse 应用程序滚动一样

    In my application I want to scroll the text on Image view like Pulse application Need not scroll inside the text view Pl
  • 分离Gdb而不恢复劣质

    Gdb 与任何其他程序一样 并不完美 我时不时会遇到导致当前 Gdb 实例无法使用的错误 此时 如果我有一个调试会话 其中有很多有价值的状态 我希望能够在其上启动一个新的 Gdb 会话 也就是说 分离 退出 Gdb 并启动一个新的 Gdb
  • 如何使用 XPath 选择多个可能的文本值?

    我必须从类似于下面的评级标签中选择评级代码 但仅限于机构为 SP 或 SNP 时 现在我有 ratings rating agency text SNP text SP code 但这似乎不起作用 我究竟做错了什么
  • 使用和不使用查询字符串路由旧请求

    开始之前 我知道this https stackoverflow com q 7395841 and this https stackoverflow com q 817325 我想找到一个更简洁的解决方案 如果可能的话 对于一个稍微更具体