【问题标题】:Manually post to an Asp.Net MVC controller手动发布到 Asp.Net MVC 控制器
【发布时间】:2011-06-16 22:25:09
【问题描述】:

我有一个看起来像这样的控制器,用于将 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();
    }

控制器被正确调用,但是当我在那里闯入时,参数为空。我很确定我只是没有设置正确的内容类型或类似的东西。对 xml 进行编码以便框架能够正确获取它并将其提供给控制器的正确方法是什么?

【问题讨论】:

  • 你在哪里将 xml 内容传递给操作?
  • 我正在将其写入请求流。
  • 但你没有给它一个名字。它需要是一个正式命名的 HTTP POST 参数。
  • 您还缺少很多用于流和请求的 using 语句
  • @crice,是的,但这就是整个程序,所以无论如何它们都会被处理掉。 @kirk,这就是我要问的问题。

标签: c# asp.net http controller


【解决方案1】:

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

【讨论】:

  • 好点。我只能读取输入流。我根本不需要框架来为我解析它。我很快就会试试这个。
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
相关资源
最近更新 更多