我有一个 ASPX 页面,它应该异步检索一些内容(一些纯文本数据),并在操作之前/期间/之后写一些东西。
目前,我可以到达“期间”步骤,但之后页面内容不再更改。
大问题是由于基础设施(错误)配置和不允许运行远程调试工具,我无法执行任何类型的调试,我必须依靠发布并看看会发生什么......
后面的代码看起来像这样(这是一个 .NET 3.5(更改目标框架不是一个选项)项目在 VS2008 下创建,后来升级到 VS2010)
void Page_Load()
{
myLabel = "Preparing to fetch content ...";
FetchContent();
}
void FetchContent()
{
try {
// "http://myUrl" returns text with header 'Content-disposition: inline;'
// If called directly, Text can be seen in the browser alright.
WebRequest request = WebRequest.Create("http://myUrl");
myLabel = "Fetching ...";
request.BeginGetResponse(new AsyncCallback((result)=>
{
//EXCEPTION HERE: 401 Unauthorized ??? url works via browser!
WebResponse resp = request.EndGetResponse(result);
StreamReader stream = new StreamReader(resp.GetResponseStream());
myLabel = "Done";
}
} catch {myLabel = "Request KO"; }
}
在 ASPX 代码中,myLabel
简单显示:
<body>
<pre><%=myLabel %></pre>
</body>
如果从浏览器调用,该 url 响应相当快,但在此代码中myLabel
从未显示Done.
,它停留在Fetching...
文本上,就像从未触发回调一样。
我在这里遗漏了一些明显的东西吗?
更新
仔细检查发现EndGetResponse
返回一个401 Unauthorized
状态码。如果我通过浏览器调用完全相同的 url,它可以完美地工作!一些现在更集中的搜索现在让我找到了解决方案。