Skip to content

Commit 29f2f7a

Browse files
committed
Adding support for MOVE and COPY HTTP methods
These methods can be found in the WebDAV spec: http://www.webdav.org/specs/rfc4918.html
1 parent 8763a56 commit 29f2f7a

File tree

7 files changed

+113
-21
lines changed

7 files changed

+113
-21
lines changed

RestSharp/Enum.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ public enum Method
4848
DELETE,
4949
HEAD,
5050
OPTIONS,
51-
PATCH
51+
PATCH,
52+
COPY,
53+
MOVE,
5254
}
5355

5456
/// <summary>

RestSharp/Http.Async.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,17 @@ public HttpWebRequest PatchAsync(Action<HttpResponse> action)
7777
return PutPostInternalAsync("PATCH", action);
7878
}
7979

80-
private HttpWebRequest GetStyleMethodInternalAsync(string method, Action<HttpResponse> callback)
80+
public HttpWebRequest CopyAsync(Action<HttpResponse> action)
81+
{
82+
return PutPostInternalAsync("COPY", action);
83+
}
84+
85+
public HttpWebRequest MoveAsync(Action<HttpResponse> action)
86+
{
87+
return PutPostInternalAsync("MOVE", action);
88+
}
89+
90+
private HttpWebRequest GetStyleMethodInternalAsync(string method, Action<HttpResponse> callback)
8191
{
8292
HttpWebRequest webRequest = null;
8393
try

RestSharp/Http.Sync.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,22 @@ public HttpResponse Delete()
7979
return GetStyleMethodInternal("DELETE");
8080
}
8181

82+
/// <summary>
83+
/// Execute a COPY request
84+
/// </summary>
85+
public HttpResponse Copy()
86+
{
87+
return PostPutInternal("COPY");
88+
}
89+
90+
/// <summary>
91+
/// Execute a MOVE request
92+
/// </summary>
93+
public HttpResponse Move()
94+
{
95+
return PostPutInternal("MOVE");
96+
}
97+
8298
/// <summary>
8399
/// Execute a PATCH request
84100
/// </summary>

RestSharp/RestClient.Async.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,13 @@ public virtual RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<
7676
case Method.PATCH:
7777
webRequest = http.PatchAsync(response_cb);
7878
break;
79-
}
79+
case Method.COPY:
80+
webRequest = http.CopyAsync(response_cb);
81+
break;
82+
case Method.MOVE:
83+
webRequest = http.MoveAsync(response_cb);
84+
break;
85+
}
8086

8187
asyncHandle.WebRequest = webRequest;
8288
return asyncHandle;

RestSharp/RestClient.Sync.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,14 @@ private IRestResponse GetResponse(IRestRequest request)
101101
break;
102102
case Method.PATCH:
103103
httpResponse = http.Patch();
104-
break;
105-
}
104+
break;
105+
case Method.COPY:
106+
httpResponse = http.Copy();
107+
break;
108+
case Method.MOVE:
109+
httpResponse = http.Move();
110+
break;
111+
}
106112

107113
var restResponse = ConvertToRestResponse(request, httpResponse);
108114
return restResponse;

RestSharp/RestClient.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,11 @@ public Uri BuildUri(IRestRequest request)
313313
}
314314
}
315315

316-
if (request.Method != Method.POST && request.Method != Method.PUT && request.Method != Method.PATCH)
316+
if (request.Method != Method.POST
317+
&& request.Method != Method.PUT
318+
&& request.Method != Method.PATCH
319+
&& request.Method != Method.COPY
320+
&& request.Method != Method.MOVE)
317321
{
318322
// build and attach querystring if this is a get-style request
319323
if (request.Parameters.Any(p => p.Type == ParameterType.GetOrPost))

RestSharp/RestClientExtensions.cs

Lines changed: 63 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ public static RestRequestAsyncHandle ExecuteAsync(this IRestClient client, IRest
6969
return client.ExecuteAsync<T>(request, callback);
7070
}
7171

72+
public static RestRequestAsyncHandle CopyAsync<T>(this IRestClient client, IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback) where T : new()
73+
{
74+
request.Method = Method.COPY;
75+
return client.ExecuteAsync<T>(request, callback);
76+
}
77+
78+
public static RestRequestAsyncHandle MoveAsync<T>(this IRestClient client, IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback) where T : new()
79+
{
80+
request.Method = Method.MOVE;
81+
return client.ExecuteAsync<T>(request, callback);
82+
}
83+
7284
public static RestRequestAsyncHandle GetAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
7385
{
7486
request.Method = Method.GET;
@@ -105,11 +117,23 @@ public static RestRequestAsyncHandle PatchAsync(this IRestClient client, IRestRe
105117
return client.ExecuteAsync(request, callback);
106118
}
107119

108-
public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
109-
{
110-
request.Method = Method.DELETE;
111-
return client.ExecuteAsync(request, callback);
112-
}
120+
public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
121+
{
122+
request.Method = Method.DELETE;
123+
return client.ExecuteAsync(request, callback);
124+
}
125+
126+
public static RestRequestAsyncHandle CopyAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
127+
{
128+
request.Method = Method.COPY;
129+
return client.ExecuteAsync(request, callback);
130+
}
131+
132+
public static RestRequestAsyncHandle MoveAsync(this IRestClient client, IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback)
133+
{
134+
request.Method = Method.MOVE;
135+
return client.ExecuteAsync(request, callback);
136+
}
113137

114138
#if FRAMEWORK
115139
public static IRestResponse<T> Get<T>(this IRestClient client, IRestRequest request) where T : new()
@@ -148,11 +172,23 @@ public static RestRequestAsyncHandle DeleteAsync(this IRestClient client, IRestR
148172
return client.Execute<T>(request);
149173
}
150174

151-
public static IRestResponse<T> Delete<T>(this IRestClient client, IRestRequest request) where T : new()
152-
{
153-
request.Method = Method.DELETE;
154-
return client.Execute<T>(request);
155-
}
175+
public static IRestResponse<T> Delete<T>(this IRestClient client, IRestRequest request) where T : new()
176+
{
177+
request.Method = Method.DELETE;
178+
return client.Execute<T>(request);
179+
}
180+
181+
public static IRestResponse<T> Copy<T>(this IRestClient client, IRestRequest request) where T : new()
182+
{
183+
request.Method = Method.COPY;
184+
return client.Execute<T>(request);
185+
}
186+
187+
public static IRestResponse<T> Move<T>(this IRestClient client, IRestRequest request) where T : new()
188+
{
189+
request.Method = Method.MOVE;
190+
return client.Execute<T>(request);
191+
}
156192

157193
public static IRestResponse Get(this IRestClient client, IRestRequest request)
158194
{
@@ -190,11 +226,23 @@ public static IRestResponse Patch(this IRestClient client, IRestRequest request)
190226
return client.Execute(request);
191227
}
192228

193-
public static IRestResponse Delete(this IRestClient client, IRestRequest request)
194-
{
195-
request.Method = Method.DELETE;
196-
return client.Execute(request);
197-
}
229+
public static IRestResponse Delete(this IRestClient client, IRestRequest request)
230+
{
231+
request.Method = Method.DELETE;
232+
return client.Execute(request);
233+
}
234+
235+
public static IRestResponse Copy(this IRestClient client, IRestRequest request)
236+
{
237+
request.Method = Method.COPY;
238+
return client.Execute(request);
239+
}
240+
241+
public static IRestResponse Move(this IRestClient client, IRestRequest request)
242+
{
243+
request.Method = Method.MOVE;
244+
return client.Execute(request);
245+
}
198246
#endif
199247
}
200248
}

0 commit comments

Comments
 (0)