-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathWebDavMethod.cs
241 lines (207 loc) · 9.79 KB
/
WebDavMethod.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
using System;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Text;
namespace WebDAVTests
{
/// <summary>
/// The WebDAV methods to use are defined in this class
/// </summary>
internal static class WebDavMethod
{
/// <summary>
/// Execute a WebDAV Propfind method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="depth">The <see cref="string" /> for the Depth header</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Propfind(string requestUri, string depth = "", string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "PROPFIND");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.ContentLength = content.Length;
request.Headers.Add("Depth", depth);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV MkCol method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse MkCol(string requestUri, string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "MKCOL");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.ContentLength = content.Length;
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Delete method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Delete(string requestUri)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "DELETE");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Put method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Put(string requestUri, string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "PUT");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.ContentLength = content.Length;
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Copy method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="destinationUri">The <see cref="string" /> for the Destination header</param>
/// <param name="overwrite">The <see cref="bool" /> for the Overwrite header</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Copy(string requestUri, string destinationUri, bool overwrite = false)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "COPY");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.Headers.Add("Destination", destinationUri);
request.Headers.Add("Overwrite", overwrite ? "T" : "F");
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Move method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="destinationUri">The <see cref="string" /> for the Destination header</param>
/// <param name="overwrite">The <see cref="bool" /> for the Overwrite header</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Move(string requestUri, string destinationUri, bool overwrite = false)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "MOVE");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.Headers.Add("Destination", destinationUri);
request.Headers.Add("Overwrite", overwrite ? "T" : "F");
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Lock method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Lock(string requestUri, string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "LOCK");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
request.ContentLength = content.Length;
request.ContentType = "text/xml; charset=\"utf-8\"";
request.Timeout = 3600;
request.Headers.Add("Depth", "0"); //can also be infinity
request.Headers.Add("Pragma", "no-cache");
// send content
var encoding = new UTF8Encoding();
byte[] byte1 = encoding.GetBytes(content);
Stream newStream = request.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Unlock method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Unlock(string requestUri, string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "UNLOCK");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Options method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Options(string requestUri)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "OPTIONS");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Head method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Head(string requestUri)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "HEAD");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Proppatch method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <param name="content">The <see cref="string" /> of the body content</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Proppatch(string requestUri, string content = "")
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "PROPPATCH");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
request.ContentLength = content.Length;
request.ContentType = "text/xml; charset=\"utf-8\"";
// send content
var encoding = new UTF8Encoding();
byte[] byte1 = encoding.GetBytes(content);
Stream newStream = request.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
return WebDav.WebDavResponse(request);
}
/// <summary>
/// Execute a WebDAV Get method on the requested URI
/// </summary>
/// <param name="requestUri">The <see cref="Uri" /> for the request</param>
/// <returns>
/// The response as a <see cref="WebResponse" />
/// </returns>
internal static WebResponse Get(string requestUri)
{
HttpWebRequest request = WebDav.WebDavRequestBase(requestUri, "GET");
request.Credentials = WebDav.WebDavCredentialCache(requestUri);
return WebDav.WebDavResponse(request);
}
}
}