Windows Phone 8.1 RT Windows.Web.Http.HttpClient 在不同的身份验证响应中返回相同的数据
Windows Phone 8.1 RT Windows.Web.Http.HttpClient returning same data in different authentication responses
我正在创建 Windows Phone 8.1 RT 应用程序(VS 2015 社区)。
我选择 Windows.Web.Http.HttpClient 用于与网络服务的通信。
在一个页面上,我尝试使用以下代码从 Web 服务获取项目列表:
public static async void GetItems(string username, string password, Action<ItemsModel, string, string> completion)
{
string methodUrl = "methodUrl";
var resourceUri = new Uri(new Uri(baseUrl), methodUrl);
var client = new HttpClient();
var byteArray = System.Text.Encoding.UTF8.GetBytes(username + ":" + password);
var basicAuth = Windows.Web.Http.Headers.HttpCredentialsHeaderValue("Basic", Convert.ToBase64String(byteArray));
client.DefaultRequestHeaders.Authorization = basicAuth;
var response = new HttpResponseMessage();
try
{
response = await client.GetAsync(resourceUri);
}
catch (Exception ex)
{
}
if (response.IsSuccessStatusCode)
{
var responseContent = await response.Content.ReadAsStringAsync();
var items = DeserializeMyItems(responseContent);
completion(items, null, null);
}
else
{
//handle errors
}
}
当我使用一个用户凭据登录(基本身份验证)时一切正常。但是当我尝试其他用户凭据(以及之后的所有其他用户凭据)时,我仍然得到与第一个相同的响应(比如响应没有刷新)。
我第一次启动应用程序时连接的每个帐户都会发生这种情况。第一次成功响应后,我总是从该响应中获取数据(即使我登录了其他有效用户凭据)。
我已经针对此请求检查了 Postman,我发现问题不在网络服务中,而是在我这边。
我还检查了响应的 headers,我发现以下所有响应在 headers (X-Vcap-Request-Id) 中具有相同的 ID。
有人可以指出导致这种行为的错误吗?
谢谢
您可以创建 HttpBaseProtocolFilter。像这样:
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent;
filter.ServerCredential = new PasswordCredential(resourceUri.ToString(), username, password);
HttpClient client = new HttpClient(filter);
我正在创建 Windows Phone 8.1 RT 应用程序(VS 2015 社区)。 我选择 Windows.Web.Http.HttpClient 用于与网络服务的通信。
在一个页面上,我尝试使用以下代码从 Web 服务获取项目列表:
public static async void GetItems(string username, string password, Action<ItemsModel, string, string> completion)
{
string methodUrl = "methodUrl";
var resourceUri = new Uri(new Uri(baseUrl), methodUrl);
var client = new HttpClient();
var byteArray = System.Text.Encoding.UTF8.GetBytes(username + ":" + password);
var basicAuth = Windows.Web.Http.Headers.HttpCredentialsHeaderValue("Basic", Convert.ToBase64String(byteArray));
client.DefaultRequestHeaders.Authorization = basicAuth;
var response = new HttpResponseMessage();
try
{
response = await client.GetAsync(resourceUri);
}
catch (Exception ex)
{
}
if (response.IsSuccessStatusCode)
{
var responseContent = await response.Content.ReadAsStringAsync();
var items = DeserializeMyItems(responseContent);
completion(items, null, null);
}
else
{
//handle errors
}
}
当我使用一个用户凭据登录(基本身份验证)时一切正常。但是当我尝试其他用户凭据(以及之后的所有其他用户凭据)时,我仍然得到与第一个相同的响应(比如响应没有刷新)。 我第一次启动应用程序时连接的每个帐户都会发生这种情况。第一次成功响应后,我总是从该响应中获取数据(即使我登录了其他有效用户凭据)。
我已经针对此请求检查了 Postman,我发现问题不在网络服务中,而是在我这边。
我还检查了响应的 headers,我发现以下所有响应在 headers (X-Vcap-Request-Id) 中具有相同的 ID。
有人可以指出导致这种行为的错误吗?
谢谢
您可以创建 HttpBaseProtocolFilter。像这样:
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent;
filter.ServerCredential = new PasswordCredential(resourceUri.ToString(), username, password);
HttpClient client = new HttpClient(filter);