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

时间:2012-03-08 08:45:55

标签: c# asp.net asp.net-web-api asp.net-mvc-routing

我正在使用带有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重写路径走下去。

1 个答案:

答案 0 :(得分:1)

这是我测试方式的一个问题。我错误地认为HttpRequestBase.AppRelativeCurrentExecutionFilePath包含请求uri的查询字符串部分。它不是。当我纠正我的模拟时,一切都开始有效了。