手动发布到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并将其提供给控制器?

手动发布到Asp.Net MVC控制器

省掉很多悲伤,使用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();
}