Основная настройка такова: у меня есть приложение 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.Я не уверен, есть ли лучший способ для этого или нет.Я мог бы опубликовать второй вопрос по этому поводу.