我有一个.Net服务,它将来自一个系统的更改打包并将它们发送到一个旧的Web服务,该服务接受并将更改处理到另一个系统。
.Net服务使用此代码发送请求:
private HttpWebRequest BuildPostRequest()
{
byte[] bytes = Encoding.ASCII.GetBytes("USERID=username&PASSWORD=pwd&SYSTEM=system&PERDATA=");
byte[] filebytes = File.ReadAllBytes(WORKPATH + "uploadPackage.zip");
byte[] encodedFileBytes = System.Web.HttpUtility.UrlEncodeToBytes(filebytes);
var section = System.Configuration.ConfigurationManager.GetSection("securitySettings") as NameValueCollection;
string username = section["Username"].ToString();
string password = section["Password"].ToString();
string authString = username + ":" + password;
authString = Convert.ToBase64String(Encoding.Default.GetBytes(authString));
HttpWebRequest req = HttpWebRequest.Create(TARGETURL) as HttpWebRequest;
req.KeepAlive = true;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Headers["Authorization"] = "Basic " + authString;
req.PreAuthenticate = true;
req.Timeout = 350000;
req.ReadWriteTimeout = 350000;
using (Stream rqStream = req.GetRequestStream())
{
rqStream.Write(bytes, 0, bytes.Length);
rqStream.Write(encodedFileBytes, 0, encodedFileBytes.Length);
}
return req;
}
此部分适用于旧的Web服务。旧的Web服务能够获取PERDATA表单数据并将其还原到文件系统上的zip文件,解压缩文件并使用zip文件中的文件来更新本地数据。
我们现在正尝试用.Net编写的新Web服务替换旧的Web服务。我有以下代码尝试执行旧的Web服务所做的事情 - 获取表单数据,将数据写为文件并解压缩文件;但是,写入的zip文件不正确,我的代码在尝试解压缩时会发生炸弹。
以下是我的尝试:
public class InputModel
{
public string userid { get; set; }
public string password { get; set; }
public string system { get; set; }
public string perdata { get; set; }
}
[HttpPost]
public IHttpActionResult Changes([FromBody] InputModel model)
{
//Write PerData to File and Unzip
var fileoutName = path + @"\perdata.zip";
var data = System.Web.HttpUtility.UrlDecodeToBytes(model.perdata);
File.WriteAllBytes(fileoutName, data);
ZipFile.ExtractToDirectory(fileoutName, path);
...
});
}
我意识到通过发送多部分表单请求可以更好地处理这个问题;但我受限于确保系统此时继续使用旧服务 - 并且它无法处理多部分请求。
然而,似乎我正在做所有将文件作为“字符串”传递所需的东西 - 但正如我所说,它只是不起作用。