Asp.net core defaultProxy
В net 4.5 мы работаем с прокси таким образом:
<system.net>
<!-- -->
<defaultProxy enabled="true" useDefaultCredentials="false">
<proxy usesystemdefault="True" proxyaddress="http://192.168.1.1:8888" bypassonlocal="True" autoDetect="False" />
<module type="CommonLibrary.Proxy.MyProxy, CommonLibrary, Version=1.0.0.0, Culture=neutral" />
</defaultProxy>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
но в ядре или тестировании asp.net мы не можем найти решение, подобное приведенному выше
Может кто-нибудь, пожалуйста, помогите мне?
Я очень ценю вашу помощь
Спасибо, С уважением
Ответы
Ответ 1
Хотя ручная настройка прокси-сервера работает, когда возможно использовать HttpClientHander
, по умолчанию все запросы для этого без кода, как вы могли бы сделать в .NET Framework, в настоящее время невозможны. Что обидно, если вы используете библиотеку, которая не предоставляет эту функциональность.
К счастью, в .NET Core 3.0 это станет возможным просто путем установки переменных среды (т.е. ведет себя точно так же, как Linux работал вечно): https://github.com/dotnet/corefx/issues/37187
Кроме того, https://github.com/dotnet/corefx/issues/36553 добавил новое статическое свойство DefaultWebProxy
в HttpClient
, которое позволит вам выполнить то же самое с помощью кода. Это также будет доступно в Core 3.0.
Ответ 2
Чтобы использовать прокси-сервер HTTP в ядре .net, вам нужно реализовать интерфейс IWebProxy
. Это из сборки System.Net.Primitives.dll
. Вы можете добавить его в project.json
, если он еще не существует
например.
"frameworks": {
"dotnet4.5": {
"dependencies": {
"System.Net.Primitives": "4.3.0"
}
}
}
Реализация очень тривиальная
public class MyHttpProxy : IWebProxy
{
public MyHttpProxy()
{
//here you can load it from your custom config settings
this.ProxyUri = new Uri(proxyUri);
}
public Uri ProxyUri { get; set; }
public ICredentials Credentials { get; set; }
public Uri GetProxy(Uri destination)
{
return this.ProxyUri;
}
public bool IsBypassed(Uri host)
{
//you can proxy all requests or implement bypass urls based on config settings
return false;
}
}
var config = new HttpClientHandler
{
UseProxy = true,
Proxy = new MyHttpProxy()
};
//then you can simply pass the config to HttpClient
var http = new HttpClient(config)
checkout https://msdn.microsoft.com/en-us/library/system.net.iwebproxy(v=vs.100).aspx
Ответ 3
Вы должны использовать промежуточное программное обеспечение. Вы посмотрели на это:
https://github.com/aspnet/Proxy
есть папка 'samples':
https://github.com/aspnet/Proxy/tree/dev/samples/Microsoft.AspNetCore.Proxy.Samples
Другие ресурсы по теме:
http://josephwoodward.co.uk/2016/07/proxying-http-requests-asp-net-core-using-kestrel
http://overengineer.net/creating-a-simple-proxy-server-middleware-in-asp-net-core
Использует ли промежуточное программное обеспечение для вас?
Ответ 4
Не работает для меня Ни через конфигурацию, ни через код. System.Net.WebRequest.DefaultWebProxy = new WebProxy (" https://webproxy.fibe.fortis: 8080 ", true, null);
Ответ 5
Еще одна незавершенная работа:
После развертывания приложения .NET Core на веб-сервере (у меня есть IIS). На самом деле в корневой папке находится файл web.config.
Добавить вручную
<system.net>
<defaultProxy useDefaultCredentials="true">
</defaultProxy>
</system.net>
или ваш конкретный параметр сделает волшебство
Работает только на сервере, хотя. Ваша локальная сборка все еще не будет работать.