Публикация вручную на контроллере Asp.Net MVC - PullRequest
4 голосов
/ 17 июня 2011

У меня есть контроллер, который выглядит так для импорта 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, чтобы фреймворк получил его и правильно передал контроллеру?

1 Ответ

4 голосов
/ 17 июня 2011

Спасите себя от горя и используйте 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...