在 asp.net core rc2 中指定代理

Posted

技术标签:

【中文标题】在 asp.net core rc2 中指定代理【英文标题】:Specify proxy in asp.net core rc2 【发布时间】:2016-05-17 00:44:53 【问题描述】:

我正在尝试在 dotnet 核心应用程序中使用 WebAPI 为请求指定 Web 代理。当我针对实际的 clr (dnx46) 时,这段代码曾经可以工作,但是现在我尝试使用 rc2 的东西,它说支持的框架是 netcoreapp1.0 和 netstandard1.5。

var clientHandler = new HttpClientHandler
    Proxy = string.IsNullOrWhiteSpace(this._clientSettings.ProxyUrl) ? null : new WebProxy (this._clientSettings.ProxyUrl, this._clientSettings.BypassProxyOnLocal),
    UseProxy = !string.IsNullOrWhiteSpace(this._clientSettings.ProxyUrl)
;

我想知道 WebProxy 类去了哪里。我在任何地方都找不到它,甚至在 github 存储库中也找不到。如果它从 WebProxy 更改,它更改为什么? 我需要能够将代理设置为特定请求的特定 URL,因此使用“全局 Internet Explorer”的方式无法满足我的需要。这主要用于调试 Web 请求/响应目的。

【问题讨论】:

【参考方案1】:

今天遇到了同样的问题。事实证明,我们必须提供自己的IWebProxy 实现。幸运的是,它一点也不复杂:

public class MyProxy : IWebProxy

    public MyProxy(string proxyUri)
        : this(new Uri(proxyUri))
    
    

    public MyProxy(Uri proxyUri)
    
        this.ProxyUri = proxyUri;
    

    public Uri ProxyUri  get; set; 

    public ICredentials Credentials  get; set; 

    public Uri GetProxy(Uri destination)
    
        return this.ProxyUri;
    

    public bool IsBypassed(Uri host)
    
        return false; /* Proxy all requests */
    

你会这样使用它:

var config = new HttpClientHandler

    UseProxy = true,
    Proxy = new MyProxy("http://127.0.0.1:8118")
;

using (var http = new HttpClient(config))

    var ip = http.GetStringAsync("https://api.ipify.org/").Result;

    Console.WriteLine("Your IP: 0");

在您的特定情况下,您甚至可以将确定是否需要代理的逻辑放入您的 IWebProxy 实现中。

【讨论】:

我也遇到过类似的问题,但有一点不同。我需要使用默认系统代理。但是,对于 .net 框架,将代理设置为 null 确实有效。如果我错了,请纠正。 如何让.net core使用默认系统代理?

以上是关于在 asp.net core rc2 中指定代理的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core RC2 IIS 在选项请求上返回 502

ASP.NET Core RC2 中的依赖注入失败

ASP.NET Core RC2 Jwt 令牌 KID 错误

如何在 ASP.NET core rc2 中禁用浏览器缓存?

在 ASP.NET Core RC2 中使用 AddAuthentication 时的不明确调用

Razor 页面在 ASP.NET Core RC2 运行时看不到引用的类库