【发布时间】:2019-12-09 17:27:32
【问题描述】:
我正在尝试从这样的 api 获取 xml 数据:
try
{
var url = "http://myapi.dev.io/xml/" + peNo;
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("restuser", "rest2user");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
using (var response = request.GetResponse() as HttpWebResponse)
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
var data = new AssetXmlDTO() { AssetXml = reader.ReadToEnd() };
return data;
}
}
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
{
// handle the 404 here
return null;
}
}
但是每次我运行代码时,我都会得到一个 404...
但是,如果我复制 url 并通过浏览器导航到它,它就可以工作。这样做时我得到以下 xml-result:
<result>
service/assets/asset/id/9301246/version/7/element/actual/0/storage/preview/file/09078960.jpg
</result>
那么为什么我的代码中确实存在 404 呢?任何想法?
【问题讨论】:
-
你能不能在 try 的第一行加上一个断点,然后把
peNo的值和你粘贴到浏览器的 url 贴出来。 -
@BarryO'Kane myapi.dev.io/xml/PE1234 是 url 字符串的结果。当我把它粘贴进去时,它就可以工作了。
-
我无法访问该网址。你是在本地运行它还是什么/
-
@BarryO'Kane 它在本地。
-
可能是第一行代码中构建的 url 不正确,或者您错误地传递了凭据。他们应该在饼干里吗?我通常看到这是通过基本身份验证完成的。
标签: c# asp.net-mvc http-status-code-404