Запрос WebClient в консольном приложении не попадает в метод при публикации - PullRequest
0 голосов
/ 24 сентября 2019

Основная настройка такова: у меня есть приложение MVC, которое запускает консольное приложение на основе пользовательского ввода.Достаточно сказать, что в конце кода консольного приложения я пытаюсь сделать веб-запрос, чтобы уведомить систему о завершении выполнения консольного приложения.Теперь, когда я отлаживаю и запускаю локально, я без проблем запускаю метод веб-API.

Однако, когда я публикую приложение MVC и скопирую его на сервер (в соответствующей папке wwwroot,он перестает работать.

Код для генерации запроса относительно прост:

public void SendRequest(Uri uri)
{
    using(var client = new WebClient())
    {
        // previously I was sending data, but this works locally regardless of the last parameter
        // also, an example of a URI would be something like 'http://localhost:666/Ctrl/SomeFunction' though 'Ctrl' is replaced by the name of the controller
        client.UploadValuesAsync(uri, "POST", new NameValueCollection());
    }
}

Тогда функция конечной точки довольно скромна (в основном, ради вопроса):

public JsonResult SomeFunction()
{
    // do stuff
}

У меня есть код регистрации по веб-запросу, чтобы увидеть, не вызвал ли он какие-либо исключения, и другой код отладки в методе контроллера. Он не выдает никаких ошибок, не сталкивается с какими-либо исключениями илокально работает нормально. Я не совсем уверен, что мне не хватает.

Что касается избежания любых ошибок SSL, то один из членов команды предложил мне использовать ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;. Я знаю, что это далеко не идеальнои, как правило, этого следует избегать, но сейчас это нужно сделать.

ОБНОВЛЕНИЕ: Я использовал UploadValues ​​и проверил ответ. Он возвращается с некоторым HTML, который выглядит какAutперенаправление аутентификации.Итак, теперь идея состоит в том, чтобы выяснить, как исключить этот маршрут из аутентификации.До сих пор атрибут [AllowAnonymous] на контроллере не был полезен (или вообще возился с атрибутами [Authorize]).Член команды предложил мне удалить авторизацию для этого действия контроллера в файле Startup.Auth.Cs.Я не уверен, есть ли лучший способ для этого или нет.Я мог бы опубликовать второй вопрос по этому поводу.

1 Ответ

0 голосов
/ 24 сентября 2019

в конце кода консольного приложения, я пытаюсь сделать веб-запрос

Возможно, это потому, что локальный запрос выполняется достаточно быстро, прежде чем консольное приложениезакрыто, но не когда оно будет опубликовано?

Попробуйте await client.UploadValuesTaskAsync(uri, "POST", new NameValueCollection()); или client.UploadValues(uri, "POST", new NameValueCollection()); Запрещается закрывать консольное приложение до завершения запроса.

...