我正在寻找一种基于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的请求中缺少什么?