diff options
Diffstat (limited to 'ServiceStack/HttpRequestExtensions.cs')
| -rw-r--r-- | ServiceStack/HttpRequestExtensions.cs | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/ServiceStack/HttpRequestExtensions.cs b/ServiceStack/HttpRequestExtensions.cs new file mode 100644 index 000000000..c34d62601 --- /dev/null +++ b/ServiceStack/HttpRequestExtensions.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using MediaBrowser.Model.Services; +using ServiceStack.Host; + +namespace ServiceStack +{ + public static class HttpRequestExtensions + { + /** + * + Input: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?q=item#fragment + + Some HttpRequest path and URL properties: + Request.ApplicationPath: /Cambia3 + Request.CurrentExecutionFilePath: /Cambia3/Temp/Test.aspx + Request.FilePath: /Cambia3/Temp/Test.aspx + Request.Path: /Cambia3/Temp/Test.aspx/path/info + Request.PathInfo: /path/info + Request.PhysicalApplicationPath: D:\Inetpub\wwwroot\CambiaWeb\Cambia3\ + Request.QueryString: /Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.AbsolutePath: /Cambia3/Temp/Test.aspx/path/info + Request.Url.AbsoluteUri: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.Fragment: + Request.Url.Host: localhost + Request.Url.LocalPath: /Cambia3/Temp/Test.aspx/path/info + Request.Url.PathAndQuery: /Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.Port: 96 + Request.Url.Query: ?query=arg + Request.Url.Scheme: http + Request.Url.Segments: / + Cambia3/ + Temp/ + Test.aspx/ + path/ + info + * */ + + /// <summary> + /// Duplicate Params are given a unique key by appending a #1 suffix + /// </summary> + public static Dictionary<string, string> GetRequestParams(this IRequest request) + { + var map = new Dictionary<string, string>(); + + foreach (var name in request.QueryString.Keys) + { + if (name == null) continue; //thank you ASP.NET + + var values = request.QueryString.GetValues(name); + if (values.Length == 1) + { + map[name] = values[0]; + } + else + { + for (var i = 0; i < values.Length; i++) + { + map[name + (i == 0 ? "" : "#" + i)] = values[i]; + } + } + } + + if ((request.Verb == HttpMethods.Post || request.Verb == HttpMethods.Put) + && request.FormData != null) + { + foreach (var name in request.FormData.Keys) + { + if (name == null) continue; //thank you ASP.NET + + var values = request.FormData.GetValues(name); + if (values.Length == 1) + { + map[name] = values[0]; + } + else + { + for (var i = 0; i < values.Length; i++) + { + map[name + (i == 0 ? "" : "#" + i)] = values[i]; + } + } + } + } + + return map; + } + + /// <summary> + /// Duplicate params have their values joined together in a comma-delimited string + /// </summary> + public static Dictionary<string, string> GetFlattenedRequestParams(this IRequest request) + { + var map = new Dictionary<string, string>(); + + foreach (var name in request.QueryString.Keys) + { + if (name == null) continue; //thank you ASP.NET + map[name] = request.QueryString[name]; + } + + if ((request.Verb == HttpMethods.Post || request.Verb == HttpMethods.Put) + && request.FormData != null) + { + foreach (var name in request.FormData.Keys) + { + if (name == null) continue; //thank you ASP.NET + map[name] = request.FormData[name]; + } + } + + return map; + } + + public static void SetRoute(this IRequest req, RestPath route) + { + req.Items["__route"] = route; + } + + public static RestPath GetRoute(this IRequest req) + { + object route; + req.Items.TryGetValue("__route", out route); + return route as RestPath; + } + } +}
\ No newline at end of file |
