首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在可移植类库中替代PreAuthenticate

在可移植类库中替代PreAuthenticate
EN

Stack Overflow用户
提问于 2013-01-26 07:16:25
回答 3查看 730关注 0票数 4

我正在将一个库移植到PCL,并且必须找到一个管理HTTP请求凭据的解决方案。我去掉了像CredentialCache这样的具体凭据类(这是不可移植的),现在只使用ICredentials,所以客户端应用程序可以创建正确的凭据并只发送一个接口引用。

然而,有一件事仍然需要解决。在某些平台上,HttpWebRequest有一个简洁的PreAuthenticate属性,负责初始握手。如果没有它,客户端需要捕获并响应401响应。但PreAuthenticate并不是大多数PCL配置文件的一部分,我想知道是否有任何解决方案,或者客户端将需要实现替换逻辑本身(这是愚蠢的,因为这是一段标准代码)。

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-19 18:38:35

可以使用HttpClient接受的作为参数构造函数的HttpClienHandler来设置PreAuthenticate,例如:

代码语言:javascript
复制
HttpClientHandler handler = new HttpClientHandler()
{
    UseDefaultCredentials = true,
    PreAuthenticate = true
};
HttpClient client = new HttpClient(handler);
票数 0
EN

Stack Overflow用户

发布于 2013-02-01 03:26:06

您需要自己编写代码来处理此问题。API只有在所有目标平台上都可用时才是可移植的。在这种情况下,PreAuthenticate是Windows4.5和Windows Store应用程序中的一个新的.NET,所以如果你针对的是任何其他平台(即.NET 4、Silverlight或Windows Phone),它将不会在可移植类库中可用。

票数 1
EN

Stack Overflow用户

发布于 2014-03-23 00:10:45

我也有同样的问题。我尝试将凭证设置为一个用户(NetworkCredental,pass),但它在WinRT中不起作用,尽管它在Windoes中起作用。到目前为止,让它在WinRT中工作的唯一方法是通过反射创建CredentialCache。

代码语言:javascript
复制
var credCacheType = Type.GetType("System.Net.CredentialCache, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
var credCache = credCacheType.GetConstructor(new Type[0]).Invoke(new object[0]);
var addMethod = credCacheType.GetMethod("Add", new Type[] { typeof(Uri), typeof(string), typeof(NetworkCredential) });
addMethod.Invoke(credCache, new object[] { new Uri(_server), "Digest", Credential });
request.Credentials = (ICredentials)credCache;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14531837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档