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

本文关键字:路由 映射 查询 参数 字符串 NET ASP URI | 更新日期: 2023-09-27 18:27:18

我使用的是带有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段
  • "news{query}"捕获查询字符串,但没有绑定到方法

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

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

这是因为我测试的方式有问题。我错误地认为HttpRequestBase.AppRelativeCurrentExecutionFilePath包括请求uri的查询字符串部分。事实并非如此。当我纠正我的Mock时,一切都开始工作了。