我正在尝试使用带有POST方法的表单向Web服务发送一些数据,并使用XML页面对其进行响应。我让POST部分使用一个简单的表单并在我的视图中提交。但是,我不知道如何处理来自这里的响应,所以我试图将它全部移动到控制器中(似乎它应该在那里)。因此理论是让用户单击一个按钮,将模型数据发送到控制器。在控制器中我试图组建一个webrequest,看起来像这样:
[HttpPost]
public ActionResult SubmitToCris(NewApplicantViewModel model)
{
string serviceURL = "https://www.blahblah.com/XMLServer/XMLServer.cgi";
string postData = "MaxRecords=0&UserID=skapi&Password=sk12024&Version=2.0&RequestType=searchName&FirstName=Nathan"
+ "&LastName=Smith&DOB=1984/2/2";
WebRequest request = WebRequest.Create(serviceURL);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
return View();
}
我似乎没有收到回复所以我挖了一个“流不支持搜索操作”。看起来这是由无法读取字节数组的长度引起的。我将通过循环来修复它。
所以我现在正在寻找的是,这甚至是正确的方法吗?我整个上午一直在研究这个问题并提出了多种方法,我选择了这个,因为它似乎是最直接的方法。
Anywho,如果我能得到MVC或ASP特定的例子或教程,关于这一切应该如何工作,那将是很好的。感谢。
------- EDIT -------------
更改了postData变量。
以下是我在发布数据后从其他公司Web服务器收到的回复:
<?xml version="1.0" encoding="UTF-8"?>
<HistoryResponse>
<ResponseType>resultsList</ResponseType>
<Matches>0</Matches>
<SessionID>75803234r23df3de</SessionID>
<RecStart>0</RecStart>
<ClientCode></ClientCode>
<Results></Results>
</HistoryResponse>
答案 0 :(得分:0)
我花了几天时间研究和询问如何从MVC控制器发布一些数据,然后获取XML响应。我很惊讶在网上找不到答案,我只能假设我的搜索参数有问题,因为它似乎不是那么深奥的东西。 Anywho,我以为我会发布我的工作代码,因为它对某人有用。免责声明 - 几个月前我刚刚开始编码,所以即使这样可行,我也不保证它是最好的方法。 : - )
[HttpPost]
public ActionResult SubmitToCris(NewApplicantViewModel model)
{
// Setup my variables
string First = model.PersonModel.FirstName;
string Last = model.PersonModel.LastName;
string dob = model.PersonModel.DateofBirth.ToString("yyyy-MM-dd");
string historyURL = "https://www.nunya.com/XMLServer/XMLServer.cgi";
//Build my data to be sent in key/value pair string
string postData = "MaxRecords=0&UserID=skapi&Password=sk12024&Version=2.0&RequestType=searchName&FirstName="
+ First + "&LastName="
+ Last + "&DOB="
+ dob;
//Create the web request, populate the header info
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(crisURL);
request.Method = "POST";
request.ContentLength = postData.Length;
request.ContentType = "application/x-www-form-urlencoded";
// Send it
using (Stream writeStream = request.GetRequestStream())
{
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
writeStream.Write(byteArray, 0, byteArray.Length);
writeStream.Close();
}
// Receive the response and do stuff with it.
string result = string.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using( Stream responseStream = response.GetResponseStream() )
{
using( StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
result = readStream.ReadToEnd();
}
}
}
XDocument resultLoad = XDocument.Parse(result);
ViewBag.XmlResponse = resultLoad.ToString();
return View();
}
目前,我对回复做的并不多,而且只不过是一个字符串。我个人需要存储一些信息并格式化几个视图,具体取决于返回的数据。一旦我对它进行了排序,我会发布它,但我现在想把它拿出来。