C# Weather.com api:是否可以排除无法加载图像的网络摄像头?
我有一个C#MVC网站,它在后端调用weather.com api,将数据(作为JSON->C#POCO)作为模型传递到前端,并在视图中处理我需要的内容 可以让weather.com API返回本地网络摄像头列表。在每个webcam类对象中,都有一个名为C# Weather.com api:是否可以排除无法加载图像的网络摄像头?,c#,jquery,asp.net-mvc-4,razor,weather-api,C#,Jquery,Asp.net Mvc 4,Razor,Weather Api,我有一个C#MVC网站,它在后端调用weather.com api,将数据(作为JSON->C#POCO)作为模型传递到前端,并在视图中处理我需要的内容 可以让weather.com API返回本地网络摄像头列表。在每个webcam类对象中,都有一个名为Currentimageurl的属性,其中意外地包含一个webcam图像的url 我注意到其中有一些没有出现。非常具体地说,当您尝试直接导航到这些对象时,会出现如下类似的拒绝访问错误: <Error> <Code>
Currentimageurl
的属性,其中意外地包含一个webcam图像的url
我注意到其中有一些没有出现。非常具体地说,当您尝试直接导航到这些对象时,会出现如下类似的拒绝访问错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId><...some number here></RequestId>
<HostId>
<...long string of characters here>
</HostId>
</Error>
所有其他图像都如您所期望的那样显示。而且,非常具体地说,当您尝试加载或导航到这些图像时,这些图像会反复出现拒绝访问错误
问题是:
foreach网络摄像头中生成指示器和图像
),因此,指示器和图像必须与针对拒绝访问的图像进行的正确“滑动到”调整保持同步虽然这不是最快的解决方案,但它的优点是可以工作,并且只需要6秒钟就可以解析45个WebCamURL。我相信可以对其进行优化,但以下是初始解决方案:
public void ValidateWebCams() {
if (Webcams == null || Webcams.Length == 0) {
throw new System.Exception("Webcams not populated!");
}
List<Webcam> newWebCamList = new List<Webcam>();
foreach (Webcam cam in this.Webcams) {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(cam.Currentimageurl);
try {
HttpWebResponse response = (HttpWebResponse)(request.GetResponse());
newWebCamList.Add(cam);
}
catch (WebException ex) {
var response = (HttpWebResponse)ex.Response; //in case I want to examine this
}//end catch
}//end foreach
this.Webcams = new Webcam[newWebCamList.Count];
int loopCounter = 0;
foreach (Webcam cam in newWebCamList) {
this.Webcams[loopCounter++] = cam;
}
}
public void ValidateWebCams(){
如果(网络摄像头==null | |网络摄像头.长度==0){
抛出新的System.Exception(“未填充网络摄像头!”);
}
List newWebCamList=新列表();
foreach(本网站中的网络摄像头){
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(cam.Currentimageurl);
试一试{
HttpWebResponse=(HttpWebResponse)(request.GetResponse());
添加(cam);
}
捕获(WebException ex){
var response=(HttpWebResponse)ex.response;//如果我想检查这个
}//端接
}//端部foreach
this.Webcam=newwebcam[newWebCamList.Count];
int循环计数器=0;
foreach(新网络摄像机列表中的网络摄像机){
这个.Webcams[loopCounter++]=cam;
}
}
总之,我们在阵列中循环浏览每个网络摄像头,抓取url并点击它,从中寻找web响应。如果是403(拒绝访问),则抛出并命中捕获。如果它抛出,我们真的不在乎它。如果没有,我们将其添加到新的网络摄像机列表中。一旦我们迭代了整个集合,我们就会擦除现有的网络摄像头集合,并将其替换为没有403的集合