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>

или ваш конкретный параметр сделает волшебство

Работает только на сервере, хотя. Ваша локальная сборка все еще не будет работать.