我刚刚编写了一个C#Lib来安全地处理WebRequests(可以找到代码打开的Here)
目前,我的GET方法将始终返回一个字符串作为响应,但有时就像从站点获取验证码一样,它需要返回一个Bitmap。
我该怎么做?如何使用某种类型使此Get请求尽可能通用,使任何人都可以选择它将接收的响应类型。
改善问题:
这是我现在尝试的。它没有编译,因为它说它无法将String
转换为此行上的T
类型:
response = (T) new StreamReader(resp.GetResponseStream()).ReadToEnd();
这是我的新方法:
public T Get <T> (string url)
{
T response = default(T);
// Checking for empty url
if (String.IsNullOrEmpty(url))
{
throw new Exception("URL para o Request não foi configurada ou é nula.");
}
try
{
// Re-Creating Request Object to avoid exceptions
m_HttpWebRequest = WebRequest.Create (url) as HttpWebRequest;
m_HttpWebRequest.CookieContainer = m_CookieJar;
m_HttpWebRequest.Method = "GET";
m_HttpWebRequest.UserAgent = m_userAgent;
m_HttpWebRequest.ServicePoint.ConnectionLimit = m_connectionsLimit;
m_HttpWebRequest.Timeout = m_timeout;
m_HttpWebRequest.ContentType = m_contentType;
m_HttpWebRequest.Referer = m_referer;
m_HttpWebRequest.AllowAutoRedirect = m_allowAutoRedirect;
if (!String.IsNullOrEmpty(m_host))
{
m_HttpWebRequest.Host = m_host;
}
// Execute web request and wait for response
using (HttpWebResponse resp = (HttpWebResponse) m_HttpWebRequest.GetResponse())
{
response = (T) new StreamReader(resp.GetResponseStream()).ReadToEnd();
}
}
catch (Exception ex)
{
m_error = ex.ToString();
if (m_logOnError)
LogWriter.Error(ex);
}
return response;
}
答案 0 :(得分:1)
方法1:
您可以使用Base64对位图进行编码。这是一个示例,向您展示如何:http://www.dailycoding.com/Posts/convert_image_to_base64_string_and_base64_string_to_image.aspx
这样,即使返回图像,也总是返回一个字符串: - )
方法2:
您可以将类型信息附加到网址,如下所示:
GET /mypage/whatever/api?x=3&y=4&t=image
答案 1 :(得分:1)
您可以使用泛型,也可以只传递所需对象的Type
。
private T Get<T>()
{
Type t_type = typeof(T);
if (t_type == typeof(string))
{
// return string
}
else if (t_type == typeof(Bitmap))
{
// return bitmap
}
}
然后这样称呼它。
Bitmap b = response.Get<Bitmap>();
答案 2 :(得分:1)
我建议你大部分时间都在这里。如果响应恰好是位图,那就是显示或解释重要数据的方式。
在一天结束时,你所拥有的是一组字节,它包含你从get方法返回的字符串,无论该内容是字符串还是图像。
您可以(例如,未经测试的代码)将此字符串转换回字节,然后转换为位图。
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] bytes = encoding.GetBytes(responseString);
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
Bitmap bitmap1 = (Bitmap) tc.ConvertFrom(bytes);
向用户显示数据时,如果在Web浏览器中,响应标题可以控制浏览器对响应的处理方式:
Response.AddHeader(&#34; Content-Disposition&#34;,&#34; Attachment; filename = Report.xls&#34;); Response.ContentType =&#34; application / vnd.ms-excel&#34 ;;