C# HttpWebRequest和HttpWebResponse显示旧数据
在更新数据之后,当调用webservice时,它仍然会获取旧数据。只有当我注销应用程序,然后再次登录时,才会加载新数据C# HttpWebRequest和HttpWebResponse显示旧数据,c#,windows-phone-8,httpwebrequest,streamreader,httpwebresponse,C#,Windows Phone 8,Httpwebrequest,Streamreader,Httpwebresponse,在更新数据之后,当调用webservice时,它仍然会获取旧数据。只有当我注销应用程序,然后再次登录时,才会加载新数据 protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); parameterValue = this.NavigationContext.Quer
protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
parameterValue = this.NavigationContext.QueryString["parameter"];
Uri UserDetailUrl = new Uri(Constants.WebService.ws_single_user + "?user_id=" + parameterValue);
HttpWebRequest UserDetailRequest = (HttpWebRequest)HttpWebRequest.Create(UserDetailUrl);
HttpWebResponse UserDetailResponse = (HttpWebResponse)await UserDetailRequest.GetResponseAsync();
StreamReader reader = new StreamReader(UserDetailResponse.GetResponseStream());
string UserDetailString = reader.ReadToEnd();
reader.Close();
XDocument XUserDetailDoc = XDocument.Load(new StringReader(UserDetailString));
if (((XElement)XUserDetailDoc.Element("main")).Element("result").Value == "success")
{
txtEmail.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("email").Value;
txtFirstName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("fname").Value;
txtLastName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("lname").Value;
txtMobile.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("mobile").Value;
}
}
Windows 8手机应用程序-使用C#和XAML
GetResponseAsync如下所示:
public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
{
var taskComplete = new TaskCompletionSource<HttpWebResponse>();
request.BeginGetResponse(asyncResponse =>
{
try
{
HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
taskComplete.TrySetResult(someResponse);
}
catch (WebException webExc)
{
HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
taskComplete.TrySetResult(failedResponse);
}
}, request);
return taskComplete.Task;
公共静态任务GetResponseAsync(此HttpWebRequest请求)
{
var taskComplete=new TaskCompletionSource();
request.BeginGetResponse(asyncResponse=>
{
尝试
{
HttpWebRequest responseRequest=(HttpWebRequest)asyncResponse.AsyncState;
HttpWebResponse someResponse=(HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
taskComplete.TrySetResult(someResponse);
}
捕获(WebException webExc)
{
HttpWebResponse failedResponse=(HttpWebResponse)webExc.Response;
任务完成。TrySetResult(失败响应);
}
},请求);
返回taskComplete.Task;
似乎HttpWebRequest
正在返回缓存结果。您有几种方法可以避免这种情况:
www.example.com/page
变为www.example.com/page?random=dsa$fds21
)OnNavigatedTo
的新代码:似乎
HttpWebRequest
正在返回缓存结果。有几种方法可以避免这种情况:
www.example.com/page
变为www.example.com/page?random=dsa$fds21
)OnNavigatedTo
的新代码:我也面临同样的问题,我通过在服务器端添加响应头解决了这个问题,如下所示
response.setHeader("Cache-Control", "no-cache");
可能这也会对您有所帮助。我也面临同样的问题,我通过在服务器端添加响应头解决了这个问题,如下所示
response.setHeader("Cache-Control", "no-cache");
这可能也会对您有所帮助。如果您使用自己的API,请尝试从该端关闭缓存。如果您使用自己的API,请尝试从该端关闭缓存。您是对的,它返回了缓存结果。。第一种解决方案对我来说确实非常有效。。但我更愿意使用第二种解决方案。禁用缓存没有任何好处o是一个完美的解决方案,但是,我尝试了跟踪指向MSDN的链接,但该解决方案对我不起作用。你是对的,它返回了缓存结果。第一个解决方案对我来说确实非常有效。但我宁愿选择第二个。禁用缓存必须是一个完美的解决方案,但是,我尝试了跟踪指向MSDN的链接,但是这个解决方案对我不起作用。是的,它确实有帮助。这可能是最好的答案。因为我完全控制了服务器端,我简单地在那里添加了标题(“缓存控制”,“无缓存”)。谢谢。是的,它确实有帮助。这可能是最好的答案。因为我完全控制了服务器端,我简单地添加了标题(“缓存控制”,“无缓存”),谢谢