web api route仅匹配第一段URL

时间:2013-04-30 09:23:06

标签: routing asp.net-web-api

我希望我的ASP.NET Web API接受此请求:

http://domain.com/proxy/service?id=12

并且仅匹配第一个/ proxy / part,将其路由到此控制器操作。因此,action的参数将是URL的其余部分:“service?id = 124”

public string Get(string url)
{
    //Calls external resource and returns response
}

在查询字符串之后,url可以有任意数量的段(它作为调用几个远程服务器的代理),但它不匹配。

我想在下面这样的东西,但它不起作用。一旦url在/ proxy / part之后有多个段,它就会与它匹配。

config.Routes.MapHttpRoute(
      name: "ApiProxy",
      routeTemplate: "proxy/{resourcePath}",
      defaults: new { Controller = "Proxy", Action="Get" }
 );

我已经研究过MessageHandlers,但是它们会被所有请求解雇,这看起来并不理想,并且希望我可以将它绑定到标准的Web Api路由中。

2 个答案:

答案 0 :(得分:2)

{resourcePath}更改为{*resourcePath}

<强>更新

我错过了您正在尝试创建代理的事实。你真的想为它而不是控制器使用消息处理程序。创建路由时,可以传递仅在匹配该路由时应用的消息处理程序。 通过使用messagehandler,可以更容易地异步代理请求,它应该比通过ApiController中的所有goop快得多。

答案 1 :(得分:0)

使用{* resourcePath}之类的通配符似乎只能解决部分问题。这意味着它会调用正确的Action,但它只会将部分URL作为resourcePath参数传递给Action方法。它不喜欢带有查询字符串的Urls。

我必须将通配符与Request.Uri结合使用,以手动删除其余的URL。