Silverlight загрузить файл на конечную точку контроллера MVC3 (сервер не найден)

#silverlight #upload

#silverlight #загрузка

Вопрос:

Я разрабатываю рекордер в silverlight, и мне нужно загрузить данные из stream на веб-сервер после завершения процесса записи. На стороне сервера я использую ASP.NET MVC 3, и я создал контроллер с помощью метода FileUpload.

 public class FileUploaderController : Controller
{
    [HttpPost]
    public ActionResult FileUpload(string fileName)
    {
    ....
    }
}
  

В апплете silverlight загрузка выполняется частями, примерно по 20000 байт за раз. Веб-конфигурация серверов настроена на прием большего объема данных.
Сервер возвращает исключение «Удаленный сервер вернул ошибку: не найдено»..

В этом случае запрос не достиг действия, и я не могу понять, почему.

Пример кода, который используется для запуска загрузки:

 UriBuilder httpHandlerUrlBuilder = new UriBuilder("http://localhost:37386/FileUploader/FileUpload/?fileName="   Guid.NewGuid()   ".wav");
   HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(httpHandlerUrlBuilder.Uri);
   webRequest.Method = "POST";
   webRequest.ContentType = "multipart/form-data"; // This solved my problem
   webRequest.BeginGetRequestStream(new AsyncCallback(WriteToStreamCallback), webRequest);
  

Редактировать

Моя конфигурация маршрута по умолчанию:

  routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
  

Когда отправляется небольшой объем данных, все проходит нормально, и сервер получает запрошенные данные. Но когда отправляемые данные больше, я просто получаю ответ NotFound. Для меня это не имеет никакого смысла, то, что я делаю, это:

  • HttpWebRequest для отправки 20000 байт
  • закрыть поток запросов (полученный из запроса.EndGetRequestStream)
  • дождитесь ответа сервера (от WebRequest.Конечный результат ответа) Здесь возникает ошибка.

В моем случае я никогда не отправляю более 20000 байт, что странно, что иногда это работает, а у других нет.

Я не знаю лучшего способа объяснить эту проблему. Если вам нужно, я могу предоставить больше кода и дополнительной информации.

Любая помощь очень ценится.

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

1. как выглядит ваш маршрут?

Ответ №1:

С помощью filddler я смог получить более подробную информацию об ошибке. Это был «потенциально опасный запрос на загрузку файла.Значение формы было обнаружено от клиента …».

Чтобы решить эту проблему, я указал тип содержимого веб-запроса на «multipart / form-data»