【问题标题】:Exception thrown when setting HttpClientHandler credentials in Windows Universal Apps在 Windows 通用应用程序中设置 HttpClientHandler 凭据时引发异常
【发布时间】:2015-05-19 11:50:20
【问题描述】:

我知道这在技术上仍然是一个预览版,这可能是一个已知(或未知)的问题,但我也可能遗漏了一些明显的问题(尤其是因为无法设置凭据听起来很重要,以至于微软可能已经修复了已经)。

复制:

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类中没有GetCredential就抛出异常,所以不是这样的。

相同的代码在 Windows 8.1 应用程序中完美运行。

我正在使用 VS2015 RC、最新的 W10 构建和最新的开发工具,所以我也没有过时。

【问题讨论】:

  • httpc.Credentials = credentials;你不应该打电话给GetCredentials吗?
  • 哈哈!这确实解决了问题。仍然有一些奇怪的事情发生(设置自定义 Credentials 对象在 W8.1 中有效,加上 AFAIK 我的方式允许您提供多个凭据(每个 URI*authType 一个),并且在需要时将正确的凭据传递给 HttpClient),但你是在这种情况下完全正确。不敢相信我错过了!
  • 有时小事会过去 :)

标签: c# win-universal-app


【解决方案1】:

正如 Yuval Itzchakov 在问题下方评论的那样,在这种情况下,您可以这样做

httpc.Credentials = new NetworkCredential("", "")

httpc.Credentials = credentials.GetCredential(uri, authType).

我仍然对为什么 W10 破坏了 W8.1 中的工作原理很感兴趣,但现在它不那么重要了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2016-05-04
    • 2010-10-26
    • 2013-03-09
    • 2016-10-27
    相关资源
    最近更新 更多