blob: a17bcf3cbfe67cbc80af96b8c9cc68ddf64913df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
//
// System.Web.Handlers.AssemblyResourceLoader
//
// Authors:
// Ben Maurer (bmaurer@users.sourceforge.net)
//
// (C) 2003 Ben Maurer
//
using System.Web;
using System.Web.UI;
using System.Reflection;
using System.IO;
namespace System.Web.Handlers {
[MonoTODO ("Should we cache stuff?")]
#if NET_2_0
public
#else
internal // since this is in the .config file, we need to support it, since we dont have versoned support.
#endif
class AssemblyResourceLoader : IHttpHandler {
internal static string GetResourceUrl (Type type, string resourceName)
{
return "WebResource.axd?assembly="
+ HttpUtility.UrlEncode (type.Assembly.GetName ().FullName)
+ "&resource="
+ HttpUtility.UrlEncode (resourceName);
}
[MonoTODO ("Substitution not implemented")]
void System.Web.IHttpHandler.ProcessRequest (HttpContext context)
{
#if NET_2_0
string resourceName = context.Request.QueryString ["resource"];
Assembly assembly = Assembly.Load (context.Request.QueryString ["assembly"]);
bool found = false;
foreach (WebResourceAttribute wra in assembly.GetCustomAttributes (typeof (WebResourceAttribute), false)) {
if (wra.WebResource == resourceName) {
context.Response.ContentType = wra.ContentType;
if (wra.PerformSubstitution)
throw new NotImplementedException ("Substitution not implemented");
found = true;
break;
}
}
if (!found)
return;
Stream s = assembly.GetManifestResourceStream (resourceName);
byte [] buf = new byte [1024];
Stream output = context.Response.OutputStream;
int c;
do {
c = s.Read (buf, 0, 1024);
output.Write (buf, 0, c);
} while (c > 0);
#endif
}
bool System.Web.IHttpHandler.IsReusable { get { return true; } }
}
}
|