直接从URL获取ApiController类的实例

时间:2018-12-13 22:37:28

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

我正在寻找一种基于URL和请求类型等在ApiController类上调用适当方法(获取,发布等)的方法,而无需发出http请求。

背景:我们有一个API应用程序,其中包含许多控制器,这些控制器还需要接受来自远程服务器的请求。由于限制,我无法控制,无法打开两个服务器之间的端口以允许远程服务器直接发出请求,因此我们决定使用websockets(SignalR)转发数据。我可以(在合理范围内)发送所需的任何信息。

我尝试了以下方法:

HttpRequestMessage request = new HttpRequestMessage();
var bld = new UriBuilder
{
    Port = 123,
    Path = "api/v1/search",
    Query = "query=search_string"
};
request.RequestUri = bld.Uri;

var httpCfg = AppConfiguration.Get().HttpConfig; //this is the same config that UseWebApi was called with and contains the routes. 
var route = httpCfg.Routes.GetRouteData(request);
var controllerSelector = new DefaultHttpControllerSelector(httpCfg);

var descriptor = controllerSelector.SelectController(request);

route包含控制器名称(搜索),但对SelectController的调用引发了带有404响应的异常(我认为这表明我在虚假请求中丢失了某些内容)。作为直接的http请求发送时,相同的URI起作用,因此路由可以尽我所能告诉我们。

是否有更好的方法来执行此操作,或者如果不是,导致404的请求中缺少什么?

0 个答案:

没有答案