I created the following two scripts based on some MSDN examples. These provide basic support for HTTP DELETE & PUT over an anonymous connection.
<script language="C#" prefix="http" >
<imports>
<import namespace="System.Net" />
<import namespace="System.IO" />
</imports>
<code>
<![CDATA[
[Function("delete-file")]
static public string DeleteFile(string uploadUrl)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl);
req.Method = "DELETE";
try
{
HttpWebResponse r = (HttpWebResponse)req.GetResponse();
return r.StatusDescription;
}
catch (WebException ex)
{
if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
{
return ((HttpWebResponse)ex.Response).StatusCode.ToString();
}
throw;
}
}
]]>
<![CDATA[
[Function("upload-file")]
static public string UploadFileBinary(string uploadUrl, string localFile)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl);
req.Method = "PUT";
//req.AllowWriteStreamBuffering = true;
// Retrieve request stream
Stream reqStream = req.GetRequestStream();
// Open the local file
FileStream rdr = new FileStream(localFile, FileMode.Open);
// Allocate byte buffer to hold file contents
byte[] inData = new byte[rdr.Length];
// loop through the local file reading each data block
// and writing to the request stream buffer
int bytesRead = rdr.Read(inData, 0, inData.Length);
while (bytesRead > 0)
{
reqStream.Write(inData, 0, bytesRead);
bytesRead = rdr.Read(inData, 0, inData.Length);
}
rdr.Close();
reqStream.Close();
HttpWebResponse r = (HttpWebResponse)req.GetResponse();
return r.StatusDescription;
}
]]>
</code>
</script>