using System.Collections.Generic;
using System.Net.Http.Headers;
+using System.Text;
namespace System.Net.Http
{
public class HttpRequestMessage : IDisposable
{
- HttpContent content;
HttpRequestHeaders headers;
HttpMethod method;
Version version;
}
public HttpRequestMessage (HttpMethod method, string requestUri)
- : this (method, string.IsNullOrEmpty (requestUri) ? (Uri) null : new Uri (requestUri))
+ : this (method, string.IsNullOrEmpty (requestUri) ? (Uri) null : new Uri (requestUri, System.UriKind.RelativeOrAbsolute))
{
}
RequestUri = requestUri;
}
- public HttpContent Content {
- get {
- return content;
- }
- set {
- content = value;
- }
- }
+ public HttpContent Content { get; set; }
public HttpRequestHeaders Headers {
get {
return uri;
}
set {
- if (value != null && (value.Scheme != Uri.UriSchemeHttp && value.Scheme != Uri.UriSchemeHttps))
+ if (value != null && value.IsAbsoluteUri && !IsAllowedAbsoluteUri (value))
throw new ArgumentException ("Only http or https scheme is allowed");
uri = value;
}
}
+ static bool IsAllowedAbsoluteUri (Uri uri)
+ {
+ if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
+ return true;
+
+ // Mono URI handling which does not distinguish between file and url absolute paths without scheme
+ if (uri.Scheme == Uri.UriSchemeFile && uri.OriginalString.StartsWith ("/", StringComparison.Ordinal))
+ return true;
+
+ return false;
+ }
+
public Version Version {
get {
return version ?? HttpVersion.Version11;
is_used = true;
return false;
}
+
+ public override string ToString ()
+ {
+ var sb = new StringBuilder ();
+ sb.Append ("Method: ").Append (method);
+ sb.Append (", RequestUri: '").Append (RequestUri != null ? RequestUri.ToString () : "<null>");
+ sb.Append ("', Version: ").Append (Version);
+ sb.Append (", Content: ").Append (Content != null ? Content.ToString () : "<null>");
+ sb.Append (", Headers:\r\n{\r\n").Append (Headers);
+ if (Content != null)
+ sb.Append (Content.Headers);
+ sb.Append ("}");
+
+ return sb.ToString ();
+ }
}
}