Merge pull request #249 from pcc/xgetinputfocus
[mono.git] / mcs / class / System.Web.Mvc3 / Mvc / HttpRequestExtensions.cs
1 namespace System.Web.Mvc {
2     using System;
3
4     public static class HttpRequestExtensions {
5         internal const string XHttpMethodOverrideKey = "X-HTTP-Method-Override";
6
7         public static string GetHttpMethodOverride(this HttpRequestBase request) {
8             if (request == null) {
9                 throw new ArgumentNullException("request");
10             }
11
12             string incomingVerb = request.HttpMethod;
13
14             if (!String.Equals(incomingVerb, "POST", StringComparison.OrdinalIgnoreCase)) {
15                 return incomingVerb;
16             }
17
18             string verbOverride = null;
19             string headerOverrideValue = request.Headers[XHttpMethodOverrideKey];
20             if (!String.IsNullOrEmpty(headerOverrideValue)) {
21                 verbOverride = headerOverrideValue;
22             }
23             else {
24                 string formOverrideValue = request.Form[XHttpMethodOverrideKey];
25                 if (!String.IsNullOrEmpty(formOverrideValue)) {
26                     verbOverride = formOverrideValue;
27                 }
28                 else {
29                     string queryStringOverrideValue = request.QueryString[XHttpMethodOverrideKey];
30                     if (!String.IsNullOrEmpty(queryStringOverrideValue)) {
31                         verbOverride = queryStringOverrideValue;
32                     }
33                 }
34             }
35             if (verbOverride != null) {
36                 if (!String.Equals(verbOverride, "GET", StringComparison.OrdinalIgnoreCase) &&
37                     !String.Equals(verbOverride, "POST", StringComparison.OrdinalIgnoreCase)) {
38                     incomingVerb = verbOverride;
39                 }
40             }
41             return incomingVerb;
42         }
43     }
44 }