Я ищу способ вызова соответствующего метода (получение, публикация и т. Д.) В классе ApiController на основе URL-адреса, типа запроса и т. Д. Без выполнения запроса http.
Справочная информация: у нас естьприложение API с многочисленными контроллерами, которое также должно принимать запросы от удаленного сервера.Из-за ограничений, которые я не могу контролировать, невозможно открыть порты между двумя серверами, чтобы позволить удаленному серверу выполнить запрос напрямую, поэтому мы решили переслать данные с помощью веб-сокетов (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);
маршрут содержит имя контроллера (поиск), но вызов SelectController вызывает исключение сответ 404 (я предполагаю, что это указывает на то, что я что-то упустил из фальшивого запроса).Тот же URI работает при отправке в виде прямого http-запроса, поэтому маршруты работают наилучшим образом.
Есть ли лучший способ сделать это, или, если нет, то, что я пропускаю в запросе, который вызывает404?