具有固定 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