C# 测试以查看C语言中是否存在图像#
我正在为SiteScope编写一个诊断页面,我们需要测试的一个方面是,是否可以从web服务器访问到文件/媒体资产的连接。我认为可以这样做的一种方法是通过代码隐藏加载映像,并测试IIS状态消息是否为200 所以基本上我应该能够在站点中导航到如下文件夹:/media/1/image.jpg,并查看它是否返回200…如果不抛出异常 我正在努力找出如何编写这段代码 非常感谢您的帮助C# 测试以查看C语言中是否存在图像#,c#,.net,iis,C#,.net,Iis,我正在为SiteScope编写一个诊断页面,我们需要测试的一个方面是,是否可以从web服务器访问到文件/媒体资产的连接。我认为可以这样做的一种方法是通过代码隐藏加载映像,并测试IIS状态消息是否为200 所以基本上我应该能够在站点中导航到如下文件夹:/media/1/image.jpg,并查看它是否返回200…如果不抛出异常 我正在努力找出如何编写这段代码 非常感谢您的帮助 谢谢只要用头就行了。如果不需要,无需下载整个图像。这里有一些样板代码 HttpWebRequest request = (
谢谢只要用头就行了。如果不需要,无需下载整个图像。这里有一些样板代码
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("url");
request.Method = "HEAD";
bool exists;
try
{
request.GetResponse();
exists = true;
}
catch
{
exists = false;
}
我将转而研究HttpWebRequest——我认为前面的答案实际上是下载数据,而您应该能够在没有HttpWebRequest数据的情况下获得响应 在第4步之前,我们应该做到这一点。如果需要,HttpWebResponse上还有其他字段用于获取数字代码 嗯
杰克我以前用过类似的方法,但可能有更好的方法:
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somewhere/picture.jpg");
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
myImg.ImageUrl = "http://somewhere/picture.jpg";
}
catch (Exception ex)
{
// image doesn't exist, set to default picture
myImg.ImageUrl = "http://somewhere/default.jpg";
}
您可能还需要检查您是否获得了OK状态代码(即HTTP 200),以及响应对象中的mime类型是否与您期望的匹配。你可以把它延伸到
public bool doesImageExistRemotely(string uriToImage, string mimeType)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage);
request.Method = "HEAD";
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK && response.ContentType == mimeType)
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
您必须处理HTTPWebResponse对象,否则您将遇到与我一样的问题
public bool DoesImageExistRemotely(string uriToImage)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage);
request.Method = "HEAD";
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
return true;
}
else
{
return false;
}
}
}
catch (WebException) { return false; }
catch
{
return false;
}
}
如果您在请求过程中遇到异常,如“远程服务器返回错误:(401)未经授权” 这可以通过添加以下行来解决
request.Credentials = new NetworkCredential(username, password);
问题和答案添加到此问题中。如果url像http:\server.myImageSite.com一样存在,则答案也为false 仅当imageSize>0为真时
public static void GetPictureSize(string url, ref float width, ref float height, ref string err)
{
System.Net.HttpWebRequest wreq;
System.Net.HttpWebResponse wresp;
System.IO.Stream mystream;
System.Drawing.Bitmap bmp;
bmp = null;
mystream = null;
wresp = null;
try
{
wreq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
wreq.AllowWriteStreamBuffering = true;
wresp = (HttpWebResponse)wreq.GetResponse();
if ((mystream = wresp.GetResponseStream()) != null)
bmp = new System.Drawing.Bitmap(mystream);
}
catch (Exception er)
{
err = er.Message;
return;
}
finally
{
if (mystream != null)
mystream.Close();
if (wresp != null)
wresp.Close();
}
width = bmp.Width;
height = bmp.Height;
}
public static bool ImageUrlExists(string url)
{
float width = 0;
float height = 0;
string err = null;
GetPictureSize(url, ref width, ref height, ref err);
return width > 0;
}
它将下载的唯一内容是响应头,根据定义,“响应”可以应用于文件夹(如果文件夹存在或不存在)?@JL,什么文件夹?文件系统??不是每个文件都会返回true,而不仅仅是图像吗?我想补充一点,如果您在HttpWebResponse请求周围添加一个using语句。。。您将确保您的应用程序在连续三次请求后不会挂起。当使用BackgroundWorker时,可能会出现这种情况。使用(HttpWebResponse=(HttpWebResponse)request.GetResponse()){//逻辑在这里出现}如果您得到任何协议错误(远程服务器返回了一个错误:(500)内部服务器错误)。更改:request.Method=“get”;要为图像指定的mimeType是什么?如果我想测试URL为
http://localhost/homepage
并查看此页面中是否缺少任何图像?我最初的想法是使用HttpWebRequest
阅读页面,获得响应,然后查看内容,对于每个元素,生成另一个请求。有什么不同的想法吗?可能是