Отправить файл в Asp.net

#c# #asp.net

#c# #asp.net

Вопрос:

Я пытаюсь протестировать возможное приложение. Это ASP.net сайт, который будет получать XML-файлы на своей странице по умолчанию. Клиент будет прикладной программой, которая сгенерирует HTTP-сообщение, содержащее файл.

Пользовательский интерфейс не задействован.

Я создал прототип Asp.Net Веб-приложение (Framework 4.5.2) и приложение Winform для его реализации.

Я перепробовал все способы размещения кода HTTP в приложении Winform, но, хотя веб-приложение default.aspx получает удар, я не могу получить доступ к полезной нагрузке.

Это включает в себя:

  • тестовое приложение считывает файл и отправляет строку. Программа StreamReader на веб-странице выдает пустую строку при чтении запроса.Входной поток.

  • Веб-клиент.Попытка загрузки файла. Запрос.Коллекция файлов пуста.

Используя Postman и POST с параметрами, сценарий StreamReader работает. т.е. Тело файла: «opennode Это узел closenode» выдает вывод строки xml.

Я должен упомянуть, что в настоящее время я использую IDE для размещения веб-страницы на случай, если это как-то повлияет на поведение.

Учитывая требование автоматической передачи между приложением и сайтом, каков правильный способ решения этой проблемы?

Обычно я бы создал веб-сервис, но пользователь веб-сайта считает это излишним и просто хочет указать URL-адрес с файлом.

Ниже приведен код приложения для попытки WebClient.

  private void OpenFile(string _file)
    {

        // WEBCLIENT TRY
        using (WebClient client = new WebClient())
        {
            client.UploadFile("http://localhost:21726/Default.aspx", _file);
        }


    }
  

ASP.NET КОД «Получение веб-клиента» выглядит следующим образом

  private void ProcessData(HttpRequest request)
    {
        try
        {

            // WEB CLIENT RECEIVE ATTEMPT

                foreach (string f in Request.Files.AllKeys)
                {
                    HttpPostedFile file = Request.Files[f];
                    file.SaveAs("c:\inetpub\test\UploadedFiles\"   file.FileName);
                }


        catch (Exception ex)
        {

            string message = ex.Message;
            throw;
        }
    }
  

Веб-страница изменена на образец кода из Microsoft Webclient.Пример загрузки файла (ниже).
Никаких изменений в поведении.
Так что это должен быть тестер WinApp.

 <%@ Import Namespace="System"%>
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Net"%>
<%@ Import NameSpace="System.Web"%>

<Script language="C#" runat=server>
void Page_Load(object sender, EventArgs e) {

    foreach(string f in Request.Files.AllKeys) {
        HttpPostedFile file = Request.Files[f];
        file.SaveAs("c:\inetpub\test\UploadedFiles\"   file.FileName);
    }   
}

</Script>
<html>
<head></head>
<body>
<p> Upload complete.  </p>
</body>
</html>
  

Комментарии:

1. Вы должны добавить некоторый код, в котором он не работает, вместе с конкретными вопросами об этом. Без предоставленного кода вам трудно помочь (не написав все это самостоятельно)

2. Фрагменты кода добавлены для попытки Webclient, поскольку это предпочтительное решение.

Ответ №1:

Проблема была двоякой: Веб-приложение отображается нормально в среде IDE, выдавая признак отсутствия файлов в контейнере RequestFiles, расположенном выше. Как только я опубликовал в локальном IIS, он начал возвращать ошибку 500 тестовому клиенту WinApp. Это мы проследили до прав доступа к каталогу (забавно, что). Мы беспечно пытались выполнить запись в местоположение за пределами сайта.
Итак, добавлен подкаталог загрузки на сайт и установлены полные разрешения. Затем изменил код записи файла на :

 foreach(string f in Request.Files.AllKeys)
    {
        //File.Create(@"C:test1.txt");
        HttpPostedFile file = Request.Files[f];
        file.SaveAs(Server.MapPath("~/Upload/")   file.FileName);
    }
  

Теперь все работает.