如何在MVC操作中获取发布的数据
本文关键字:数据 获取 MVC 操作 | 更新日期: 2023-09-27 17:58:39
我正试图将一些数据发布到ASP。NET MVC控制器操作。当前我正在尝试使用WebClient。UploadData()将几个参数发布到我的操作中。
以下内容将执行操作,但所有参数都为空。如何从http请求中获取发布的数据?
string postFormat = "hwid={0}&label={1}&interchange={2}localization={3}";
var hwid = interchangeDocument.DocumentKey.Hwid;
var interchange = HttpUtility.UrlEncode(sw.ToString());
var label = ConfigurationManager.AppSettings["PreviewLabel"];
var localization = interchangeDocument.DocumentKey.Localization.ToString();
string postData = string.Format(postFormat, hwid, interchange, label, localization);
using(WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8;
client.Credentials = CredentialCache.DefaultNetworkCredentials;
byte[] postArray = Encoding.ASCII.GetBytes(postData);
client.Headers.Add("Content-Type", "pplication/x-www-form-urlencoded");
byte[] reponseArray = client.UploadData("http://localhost:6355/SymptomTopics/BuildPreview",postArray);
var result = Encoding.ASCII.GetString(reponseArray);
return result;
}
这是我称之为的行动
公共操作结果BuildPreview(字符串hwid,字符串标签,字符串交换,字符串本地化){…}
当达到此操作时,所有参数都为空。
我已尝试使用WebClient。UploadValue()并将数据作为NameValueCollection传递。这个方法总是返回500的状态,因为我是从MVC应用程序中发出这个http请求的,所以我找不到解决这个问题的方法。
解决这个问题的任何帮助都会非常有帮助。
-Nick
我将标题更正为:
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
现在UploadData只是立即出现错误,服务器错误为500。
只是为了好玩,看看控制器中的Request.Form
和RouteData
,看看是否有什么结果。
我能够从Request对象InputStream属性获取post.xml数据。
public ActionResult BuildPreview(string hwid, string label, string localization)
{
StreamReader streamReader = new StreamReader(Request.InputStream);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(streamReader.ReadToEnd());
...
}
作为权宜之计,您可以随时更改控制器操作以接受FormCollection
参数,然后直接按名称访问表单参数。
从WebClient.UploadData("http://somewhere/BuildPreview", bytes)
获取原始发布字节
public ActionResult BuildPreview()
{
byte[] b;
using (MemoryStream ms = new MemoryStream())
{
Request.InputStream.CopyTo(ms);
b = ms.ToArray();
}
...
}