ASP.NET Mvc - 可为空参数和逗号作为分隔符

2024-03-28

我应该如何在 global.asax 中定义路由才能使用可为空的参数和逗号作为分隔符?

我正在尝试为我的搜索用户页面实施路由规则,例如

"{Controller}/{Action},{name},{page},{status}"

Global.asax 的完整条目:

    routes.MapRoute(
        "Search",
        "{controller}/{action},{name},{page},{status}",
            new { controller = "User", action = "Find", 
                name = UrlParameter.Optional,
                page = UrlParameter.Optional,
                status = UrlParameter.Optional  } 
    );

当我输入所有参数时,像上面定义的例程工作正常,但是当某些参数等于空时,路由失败(例如“user/find,”)


根据点击率 /users/148403/clicktricity下面的评论 - 处理请求的操作方法的签名:

public ActionResult Find(string userName, int? page, int? status)
{
    // [...] some actions to handle the request

}

一开始我是通过 VS 调试器测试路由,现在我使用上描述的路由调试器菲尔的 Haack 博客 http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx。该工具确认 - 带有空值的路由未正确处理(或者我做错了什么;))


据我所知,.Net 路由不允许您执行这样的多个可为空的参数。多个参数仅在缺少从末尾向后工作并且分隔符也丢失的情况下才有效,因此您将获得匹配项


user/find,bob,2,live
user/find,bob,2
user/find,bob
user/find  

使用查询字符串来完成您想要做的事情会容易得多。

根据评论进行编辑:

如果这是必要的那么你可以尝试这样做(尽管这不是一个好的方法)

更改您的路径以匹配

{Controller}/{Action},{*parameters}

确保对操作和控制器施加约束,以便将其限制为尽可能少。

将需要完整列表的每个操作重命名为其他名称,为每个操作添加标准前缀将是最简洁的方法,然后添加[NonAction]属性。添加一个具有原始名称的新方法,该方法接受一个字符串,该字符串是变量的逗号分隔字符串。在此方法中,拆分字符串并返回传入拆分值的原始操作。

所以你从:

public ActionResult Find(string name, int page, string status){
    //Do stuff here
    return View(result);
}

To

public ActionResult Find(string parameters){
    string name;
    int? page;
    string status;
    //split parameters and parse into variables
    return FindAction(name, page, status);
}

[NonAction]
public ActionResult FindAction(string parameters){
    //Do what you did in your previous Find action
    return View(results);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Mvc - 可为空参数和逗号作为分隔符 的相关文章

  • mvc3 路由设置为 id, id2 id3

    我有以下区域路线设置 context MapRoute Admin default3 Admin controller action id id2 id3 new action Index context MapRoute Admin de
  • Google 地图 v3 创建两点之间的路线

    我正在使用 Google Maps API 开发网络应用程序 我正在尝试在两点之间创建一条路线 但由于某种原因我还没有弄清楚如何创建它 以下是我的代码 如果我缺少什么 请告诉我 谢谢
  • 通过 PageController 路由除现有控制器之外的所有请求 (Zend Framework)

    对于新的 CMS 我开发了一个页面模块 它允许我管理网站的树结构 每个页面都可以通过 url 访问http www example com pageslug http www example com pageslug 其中pageslug
  • ReactJS 通过 API 调用保护路由

    我正在尝试保护 ReactJS 中的路由 在每个受保护的路由上 我想检查保存在 localStorage 中的用户是否良好 下面你可以看到我的路线文件 app js class App extends Component render re
  • 注册到 global.asax 的路由的替代位置

    最常见的做法是在 Application Start 事件中注册路由global asax cs vb文件 但您需要有权访问该文件才能执行此操作 美好的 我要么没有 要么不想 我正在尝试将 Asp net MVC 应用程序集成到 Share
  • 使用 Rails 动态构建 RESTful 路由

    我正在尝试编写一个辅助方法 该方法接受复数资源的名称并返回相应的链接 该方法的本质是 def get link resource link to resource capitalize resource path end 显然resourc
  • 使用 ui-sref 进行站点导航,如何在不可用时删除 ui-sref 属性

    我使用 ng repeat 设置了导航 效果非常好 a span class title link Text span span class selected span a 但是 我的导航项经常有子链接 这意味着父链接并不是真正的导航链接
  • 如何将 React Router location prop 传递给组件?

    我试图弄清楚如何将 React Router 的 location 属性传递给组件 我有一个这样定义的路线
  • 检查 401,然后重定向 Angularjs,但仅在某些路由上

    我有一个很好的角度服务 可以通过查看服务器是否返回 401 错误消息来检查用户是否登录 如果是 用户将被重定向到登录页面 这很有效 但问题是它对于我的所有页面来说都是完全全局的 我有一条特殊路线位于 explore 顺便说一句 使用 UI
  • ASP.NET MVC 2 - POST 后 ViewData 为空

    我真的不知道在哪里寻找错误 情况 我有一个 ASPX 视图 其中包含一个表单和一些输入 当我单击 提交 按钮时 所有内容都会 POST 到我的一个 ASP NET MVC 操作 当我在那里设置断点时 它被正确命中 当我使用 FireBug
  • 如何在 WordPress 中创建“路线”?

    为了我自己的理智 我正在尝试为 ajax api 创建一条路由 如下所示 api
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • PHP 路由 - 样式表无效

    我用 PHP 创建了一个基本的路由系统 url 被分割成一个数组 这样我就可以根据 URL 决定显示什么 例如 www domain com page option param 因此 在我的index php 中 我为页眉 内容和页脚定义了
  • MVC 自定义路由。 DataTokens["Namespaces"] 被忽略

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

    尝试使用 Doctrine 而不是 Eloquent 让 Laravel 进行多重身份验证 我已经尝试了很多事情 但总是陷入困境 我目前定义了两个守卫 两个模型 两个登录控制器等 如果我启用其中之一 它们就会起作用 如果我同时尝试两者 则似
  • Angular子路由和404

    查找不存在链接的路线不允许您浏览子链接 应用程序路由 module ts import NgModule from angular core import Routes RouterModule from angular router im
  • emberjs 对一条路线使用多个路径/url

    在 Ember 中我可以使用这个 App Router map function this route accomodations 因此 如果访问 accomodations 它将加载该视图 我还可以补充 App Router map fu
  • Angular刷新页面重复url中的页面

    我是一名 Angular 新手 正在构建一个简单的寻呼机 我设置了路由器 以便空 URL 重定向到仪表板组件 因此localhost 4200会自动路由到localhost 4200 dashboard完美的 但是 如果我单击刷新按钮 它会
  • 使用继承的 MVC2 DataAnnotations 验证

    我有一个 NET 2 0 类 其属性被标记为 virtual 我需要在 MVC2 应用程序中使用该类作为模型 因此 我创建了一个继承自 NET 2 0 类的 NET 3 5 类 并将 DataAnnotations 属性添加到新类中的重写属
  • 如何在rails中定义自定义路径?

    我有一个用户模型 如果我做 def my action user User new end then I get undefined method users path for

随机推荐

  • 如何确定 VB6 应用程序和使用 CreateObject() 实例化的 exe 之间的关联

    我们需要弄清楚服务如何查看正在运行的 VB6 应用程序和 或其 DCOM 生成的 exe 并找出哪个 VB6 应用程序与哪个 DCOM exe 配合使用 VB6 应用程序和生成的 exe 均位于同一服务器上 我们有一个 VB6 应用程序 它
  • UINavigationController 和 viewWillDisappear

    因此 我的应用程序中有一个 UINavController 并尝试在用户按下后退按钮时执行一个方法 我到处搜索 只能找到断章取义的零碎内容 有没有办法实现某种检查 当用户按下后退按钮以关闭当前视图时进行捕获 出于某种原因 弹出视图的 vie
  • try/catch/finally 在 groovy 编译器异常的情况下屏蔽 Jenkinsfile 问题

    我的 Jenkinsfile 中有类似于以下代码的代码 node checkout scm do some stuff try do some maven magic catch error stage Cleanup after fail
  • 用于接收 UDP 数据包的可变大小缓冲区

    我有一个 UDP 套接字 它将接收一些可能不同大小的数据包 并且我异步处理它 socket async receive from boost asio buffer buffer 65536 senderEndpoint handler 这
  • Espresso 测试调用视图按钮单击等待调用 api 响应数据进度对话框退出

    我使用 via espresso 库开发自动化测试 有时我 运行测试时曾经收到错误消息 无法启动意图 Intent 在 api 响应数据进度对话框退出后 我调用 view btn click 很长时间 请帮助我为那些有使用浓缩咖啡技术进行自
  • Angular http.get() url 作为原始 HTML

    我正在为作业创建一个网站 我想在其中动态加载一些数据 问题是 数据仅来自网站 没有 API 或任何东西 有什么方法可以使用 http get 来将整个网站作为原始 HTML 来提取 然后我可以解析它以获取信息吗 Thanks 您可以设置re
  • 在 AS7 中转换查找的 EJB 视图时出现 ClassCastException

    我正在将 2 个 EAR 部署到 JBoss AS 7 1 0 Alpha1 SNAPSHOT 7 0 1 Final 版本之后 两者都部署得很好 我有一个 EJB Singleton 类打包在一个 JAR 中 位于其中一个 EAR 中 S
  • PHP cURL 上传文件到 Node JS 服务器

    我有一个 PHP 前端项目和 Node JS API 我需要将文件发送到 API 但我必须使用 cURL 因为表单发送到 PHP 而 PHP 通过 cURL 发送到 Node JS 我尝试了很多不同的方法 但我无法让它发挥作用 在我正在使用
  • 未显示视图的屏幕截图

    我试图在显示 MyFirstViewController 时截取 MySecondViewController view 的屏幕截图 我不希望 MySecondViewController 随时出现在屏幕上 那可能吗 这是我当前在 MyFi
  • HashMap 分组依据 (Java)

    有没有一种方法可以在Java中按Key分组并将值添加到HashMap中 HashMap
  • 理解这部分手臂的汇编代码

    syntax unified thumb cpu cortex m4 arch armv7e m fpu fpv4 sp d16 Changes from unprivileged to privileged mode thumb func
  • constexpr 可以和 volatile 结合使用吗?

    以下代码片段在 Clang 3 5 中工作正常 但在 GCC 4 9 2 中不行 int main constexpr volatile int i 5 有错误 错误 此处不能使用 挥发性 和 constexpr 如果我检查 Clang 生
  • 将新的提交添加到现有的 Git 标签

    我创建了一个 Git 标签v1 1 using git tag a v1 1 m my version 1 1 我推了那个标签 后来我做了一些相关的修改v1 1 现在 当我推送新的更改并使用检查 git 标签时git describe它向我
  • GTK 窗口运动动画?

    我想自动在屏幕上移动我的 GTK WINDOW 目前我将它置于绘制 移动循环中 但这非常不稳定 我对 GTK 编程 以及一般的 gui 编程 非常陌生 我缺少什么 您还没有说您希望窗口遵循什么样的路径 如果路径是时间的一些简单函数 也就是说
  • 如何在swift4中创建串行队列[重复]

    这个问题在这里已经有答案了 DispatchQueue init label qos attributes autoreleaseFrequency target 参数怎么写 原著笔记看了半天 还是不会写串行队列 None
  • Bootstrap - 如何用JSP实现模态弹出窗口

    我正在尝试使用 Spring MVC 通过 JSP 实现模式弹出窗口 In my 索引 jsp我有这个href链接 a href findCompany Find company a and 总是在这个 jsp中 有这样的代码片段 div
  • Crypto++“Tee”式过滤器

    我正在研究根据某些条件处理数据流 数据从输入管道读取 处理并推送到 Crypto CBC Mode
  • 如何在Mac中从命令行启动docker

    我在 mac 上安装了 docker 桌面 因此 为了启动 docker 我打开应用程序并找到 docker 然后我可以在顶部栏看到一个泊坞窗图标 稍后我可以从命令行运行 docker 命令 我的问题是如何从命令行启动 docker 本身
  • 使用 Passport.js 登录后如何通过 React 进行“重定向”?

    新手反应问题 我将其与passport js 和express 一起使用 我已成功登录该应用程序 但我不知道如何进行重定向 router post login passport authenticate local function req
  • ASP.NET Mvc - 可为空参数和逗号作为分隔符

    我应该如何在 global asax 中定义路由才能使用可为空的参数和逗号作为分隔符 我正在尝试为我的搜索用户页面实施路由规则 例如 Controller Action name page status Global asax 的完整条目