2 // System.Web.HttpRequest.cs
6 // Miguel de Icaza (miguel@novell.com)
7 // Gonzalo Paniagua Javier (gonzalo@novell.com)
11 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using System.Web.Util;
37 using System.Collections.Specialized;
39 namespace System.Web {
42 // Methods exposed through HttpContext.Server property
45 public sealed class HttpServerUtility {
48 internal HttpServerUtility (HttpContext context)
50 this.context = context;
53 public void ClearError ()
55 context.ClearError ();
58 public object CreateObject (string progID)
60 throw new HttpException (500, "COM is not supported");
63 public object CreateObject (Type type)
65 throw new HttpException (500, "COM is not supported");
68 public object CreateObjectFromClsid (string clsid)
70 throw new HttpException (500, "COM is not supported");
73 public void Execute (string path)
78 public void Execute (string path, TextWriter writer)
80 Execute (path, writer, false);
88 void Execute (string path, TextWriter writer, bool preserveQuery)
91 throw new ArgumentNullException ("path");
93 if (path.IndexOf (':') != -1)
94 throw new ArgumentException ("Invalid path.");
96 int qmark = path.IndexOf ('?');
99 query = path.Substring (qmark + 1);
100 path = path.Substring (0, qmark);
105 HttpRequest request = context.Request;
106 HttpResponse response = context.Response;
108 string oldQuery = request.QueryStringRaw;
109 request.QueryStringRaw = query;
111 WebROCollection oldForm = null;
112 if (!preserveQuery) {
113 oldForm = request.Form as WebROCollection;
114 request.SetForm (new WebROCollection ());
117 TextWriter output = writer;
119 output = response.Output;
121 string oldFilePath = request.FilePath;
122 request.SetCurrentExePath (UrlUtils.Combine (request.BaseVirtualDir, path));
123 IHttpHandler handler = context.ApplicationInstance.GetHandler (context);
124 TextWriter previous = null;
126 previous = response.SetTextWriter (output);
127 if (!(handler is IHttpAsyncHandler)) {
128 handler.ProcessRequest (context);
130 IHttpAsyncHandler asyncHandler = (IHttpAsyncHandler) handler;
131 IAsyncResult ar = asyncHandler.BeginProcessRequest (context, null, null);
132 ar.AsyncWaitHandle.WaitOne ();
133 asyncHandler.EndProcessRequest (ar);
136 request.SetCurrentExePath (oldFilePath);
137 request.QueryStringRaw = oldQuery;
138 response.SetTextWriter (previous);
140 request.SetForm (oldForm);
144 public Exception GetLastError ()
146 return context.Error;
149 public string HtmlDecode (string s)
151 return HttpUtility.HtmlDecode (s);
154 public void HtmlDecode (string s, TextWriter output)
156 HttpUtility.HtmlDecode (s, output);
159 public string HtmlEncode (string s)
161 return HttpUtility.HtmlEncode (s);
164 public void HtmlEncode (string s, TextWriter output)
166 HttpUtility.HtmlEncode (s, output);
169 public string MapPath (string path)
171 return context.Request.MapPath (path);
174 public void Transfer (string path)
176 // If it's a page and a postback, don't pass form data
178 bool preserveForm = true;
179 if (context.Handler is Page) {
180 Page page = (Page) context.Handler;
181 preserveForm = !page.IsPostBack;
184 Transfer (path, preserveForm);
187 public void Transfer (string path, bool preserveForm)
189 Execute (path, null, preserveForm);
190 context.Response.End ();
193 public string UrlDecode (string s)
195 return HttpUtility.UrlDecode (s);
198 public void UrlDecode (string s, TextWriter output)
201 output.Write (HttpUtility.UrlDecode (s));
204 public string UrlEncode (string s)
206 return HttpUtility.UrlEncode (s);
209 public void UrlEncode (string s, TextWriter output)
212 output.Write (HttpUtility.UrlEncode (s));
215 public string UrlPathEncode (string s)
220 int idx = s.IndexOf ("?");
223 s2 = s.Substring (0, idx-1);
224 s2 = HttpUtility.UrlEncode (s2) + s.Substring (idx);
226 s2 = HttpUtility.UrlEncode (s);
232 public string MachineName {
233 get { return Environment.MachineName; }
236 public int ScriptTimeout {
237 get { return (int) context.ConfigTimeout.TotalSeconds; }
238 set { context.ConfigTimeout = new TimeSpan (0, 0, value); }