1

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

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

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

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

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

我想要下面这样的东西,但它不起作用。只要 url 在 /proxy/ 部分之后有多个段,它就会匹配它。

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

我正在研究 MessageHandlers,但它们会因所有请求而被解雇,这似乎并不理想,我希望我可以将它与标准的 Web Api 路由联系起来。

4

2 回答 2

2

更改{resourcePath}{*resourcePath}

更新

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

于 2013-04-30T11:11:46.227 回答
0

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

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

于 2013-05-01T10:26:56.417 回答