具有固定 URI 的 ASP.NET 路由不映射查询字符串参数

Posted

技术标签:

【中文标题】具有固定 URI 的 ASP.NET 路由不映射查询字符串参数【英文标题】:ASP.NET route with fixed URI not mapping querystring parameters 【发布时间】:2012-03-25 18:32:37 【问题描述】:

我正在使用带有 Web API 的 ASP.NET MVC 4 Beta - 尽管我相信路由实现与与此问题相关的 .NET 4.0 没有显着差异。 MapHttpRoute,在下面的代码中使用,随 MVC 4 一起提供,是一种扩展方法,与 MapRoute 执行相同的功能,但用于 WebApi 控制器。

我有一个旧的 Web 服务方法,我想为其创建一个 ASP.NET 路由。该方法目前具有以下签名:

NewsItemList ListNewsItems(string category, int maxResults)

它应该由 URI 如下所示的请求映射:

~/news?category=finance&maxResults=50

查询字符串参数中的一个或两个都不能出现。

我正在努力寻找一种方法来定义支持此方法的路线。

我使用MapHttpRoute 注册路由并为控制器设置默认值,并适当地为控制器和方法设置操作值。以下是我尝试过的一些模板:

"news" 捕获 "~/news" 并正确绑定到方法,但是 不会使用查询字符串捕获任何内容。 "news*query 不是 允许,因为你不能有一个包罗万象的东西,除非它是专有的 Uri 段 "newsquery" 捕获查询字符串但不捕获 绑定到方法

我正在寻找一种不太激进的前进方式,因为这是应用程序中的一个边缘案例。该解决方案必须适合许多其他现有路线。理想情况下,我也希望避免走 Uri 重写器路径。

【问题讨论】:

【参考方案1】:

这归结为我测试的方式存在问题。我错误地认为HttpRequestBase.AppRelativeCurrentExecutionFilePath 包含请求uri 的查询字符串部分。它不是。当我纠正我的 Mock 时,一切都开始工作了。

【讨论】:

以上是关于具有固定 URI 的 ASP.NET 路由不映射查询字符串参数的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 asp.net mvc 中的公共路由之前先映射特殊路由?

类型:.net;问题:ASP.NET路由;结果:ASP.NET 路由 .NET Framework 4

IIS 6 上的 ASP.NET MVC - 通配符映射 - 传入请求与任何路由都不匹配

ASP.NET的路由系统:路由映射

ASP.Net MVC 路由映射

ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API