手动发布到Asp.Net MVC控制器
本文关键字:Net MVC 控制器 Asp | 更新日期: 2023-09-27 17:59:16
我有一个控制器,用于将xml导入到我的网站:
[HttpPost]
public ActionResult Import(string xml)
{
我有一个独立的应用程序,它读取一个xml文件并将其发送到url。它看起来像这样:
static void Main(string[] args)
{
var reader = new StreamReader(@"myfile.xml");
var request = WebRequest.Create("http://localhost:41379/mycontroller/import");
request.Method = "POST";
request.ContentType = "text/xml";
StreamWriter sw = new StreamWriter(request.GetRequestStream());
sw.Write(reader.ReadToEnd());
sw.Close();
var theResponse = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(theResponse.GetResponseStream());
var response = sr.ReadToEnd();
}
控制器被正确地调用,但当我闯入时,参数为null。我很确定我只是没有设置正确的内容类型或类似的内容。对xml进行编码的正确方法是什么,以便框架能够正确地获取xml并将其提供给控制器?
省掉很多悲伤,使用WebClient.UploadFile。
在把你引向错误的道路后,我写了一个控制器和客户端,看起来运行良好:
控制器
public class HomeController : Controller
{
public ActionResult Upload()
{
XDocument doc;
using (var sr = new StreamReader(Request.InputStream))
{
doc = XDocument.Load(sr);
}
return Content(doc.ToString());
}
}
客户端
static void Main(string[] args)
{
var req = (HttpWebRequest)WebRequest.Create("http://host/Home/Upload");
req.Method = "POST";
req.ContentType = "text/xml";
using (var stream = File.OpenRead("myfile.xml"))
using (var requestStream = req.GetRequestStream()) {
stream.CopyTo(requestStream);
}
using (var response = (HttpWebResponse) req.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var sr = new StreamReader(responseStream))
{
XDocument doc = XDocument.Load(sr);
Console.WriteLine(doc);
}
Console.ReadKey();
}