在 Windows Universal Apps 中设置 HttpClientHandler 凭据时抛出异常
Exception thrown when setting HttpClientHandler credentials in Windows Universal Apps
我知道这在技术上仍然是一个预览,这可能是一个已知(或未知)的问题,但我也可能遗漏了一些明显的东西(特别是因为无法设置凭据听起来很重要,微软可能会已经修好了)。
重现:
public class Credentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
return new NetworkCredential("username", "password");
}
}
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
try
{
var credentials = new Credentials();
var httpc = new HttpClientHandler();
httpc.UseDefaultCredentials = false;
httpc.Credentials = credentials;
}
catch (Exception ex)
{
return;
}
}
异常详情为:
留言:
Value cannot be null.
Parameter name: format
堆栈跟踪:
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.Net.Http.HttpClientHandler.set_Credentials(ICredentials value)
at WinTenTest.App..ctor()
我的意思是,很清楚内部问题是什么,但我不知道为什么。调用Credentials class时没有GetCredential就抛出异常,所以不是那样。
相同的代码在 Windows 8.1 应用程序中完美运行。
我正在使用 VS2015 RC、最新的 W10 版本和最新的开发工具,所以我也没有过时。
正如 Yuval Itzchakov 在问题下方评论的那样,在这种情况下你可以这样做
httpc.Credentials = new NetworkCredential("", "")
或
httpc.Credentials = credentials.GetCredential(uri, authType).
我仍然很好奇为什么 W10 破坏了 W8.1 中的功能,但现在已经不那么重要了。
我知道这在技术上仍然是一个预览,这可能是一个已知(或未知)的问题,但我也可能遗漏了一些明显的东西(特别是因为无法设置凭据听起来很重要,微软可能会已经修好了)。
重现:
public class Credentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
return new NetworkCredential("username", "password");
}
}
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
try
{
var credentials = new Credentials();
var httpc = new HttpClientHandler();
httpc.UseDefaultCredentials = false;
httpc.Credentials = credentials;
}
catch (Exception ex)
{
return;
}
}
异常详情为:
留言:
Value cannot be null.
Parameter name: format
堆栈跟踪:
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.Net.Http.HttpClientHandler.set_Credentials(ICredentials value)
at WinTenTest.App..ctor()
我的意思是,很清楚内部问题是什么,但我不知道为什么。调用Credentials class时没有GetCredential就抛出异常,所以不是那样。
相同的代码在 Windows 8.1 应用程序中完美运行。
我正在使用 VS2015 RC、最新的 W10 版本和最新的开发工具,所以我也没有过时。
正如 Yuval Itzchakov 在问题下方评论的那样,在这种情况下你可以这样做
httpc.Credentials = new NetworkCredential("", "")
或
httpc.Credentials = credentials.GetCredential(uri, authType).
我仍然很好奇为什么 W10 破坏了 W8.1 中的功能,但现在已经不那么重要了。