Получить экземпляр класса ApiController из URL напрямую - PullRequest
0 голосов
/ 14 декабря 2018

Я ищу способ вызова соответствующего метода (получение, публикация и т. Д.) В классе 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...