我正在将一个库移植到PCL,并且必须找到一个管理HTTP请求凭据的解决方案。我去掉了像CredentialCache这样的具体凭据类(这是不可移植的),现在只使用ICredentials,所以客户端应用程序可以创建正确的凭据并只发送一个接口引用。
然而,有一件事仍然需要解决。在某些平台上,HttpWebRequest有一个简洁的PreAuthenticate属性,负责初始握手。如果没有它,客户端需要捕获并响应401响应。但PreAuthenticate并不是大多数PCL配置文件的一部分,我想知道是否有任何解决方案,或者客户端将需要实现替换逻辑本身(这是愚蠢的,因为这是一段标准代码)。
提前感谢
发布于 2014-05-19 18:38:35
可以使用HttpClient接受的作为参数构造函数的HttpClienHandler来设置PreAuthenticate,例如:
HttpClientHandler handler = new HttpClientHandler()
{
UseDefaultCredentials = true,
PreAuthenticate = true
};
HttpClient client = new HttpClient(handler);发布于 2013-02-01 03:26:06
您需要自己编写代码来处理此问题。API只有在所有目标平台上都可用时才是可移植的。在这种情况下,PreAuthenticate是Windows4.5和Windows Store应用程序中的一个新的.NET,所以如果你针对的是任何其他平台(即.NET 4、Silverlight或Windows Phone),它将不会在可移植类库中可用。
发布于 2014-03-23 00:10:45
我也有同样的问题。我尝试将凭证设置为一个用户(NetworkCredental,pass),但它在WinRT中不起作用,尽管它在Windoes中起作用。到目前为止,让它在WinRT中工作的唯一方法是通过反射创建CredentialCache。
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;https://stackoverflow.com/questions/14531837
复制相似问题