Могу ли я увеличить maxRequestLength запроса ASP.NET для действия контроллера MVC с дополнительными параметрами? - PullRequest
6 голосов
/ 08 ноября 2011

Могу ли я увеличить maxRequestLength запроса ASP.NET для действия контроллера MVC с дополнительными параметрами?

У меня есть UploadController с ActionResult, который выглядит примерно так.

  [HttpPost]
  public ActionResult VideoUpload(int memberId)
  {
    var status= _docRepo.SaveDocument(DocumentType.Video, Request.Files, memberId);
        return Json(new { success = true, status = status});
  }

Файлы могут быть очень большими, я увеличил maxRequestLenght в web.config и могу загружать файлы, но меня беспокоит проблема безопасности. Итак, я попробовал это, и это не работает:

 <location path="VideoUpload">
        <system.web>
            <httpRuntime maxRequestLength="1024000" executionTimeout="600" />
        </system.web>
        <system.webServer>
            <security>
                <requestFiltering>
                    <requestLimits maxAllowedContentLength="1024000"/>
                </requestFiltering>
            </security>
        </system.webServer>
    </location>

Есть идеи? (метод загрузки использует swfupload)

Ответы [ 2 ]

2 голосов
/ 11 октября 2012

Действия контроллера MVC не используют раздел location файла Web.config.См. этот ответ для получения дополнительной информации .Вы можете увеличить его программно с помощью свойства MaxRequestLength .

0 голосов
/ 11 октября 2012

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

Используйте вызов jquery ajax для вызова вашего контроллера и параллельной библиотеки задач для сохранения документа.Вызов ajax может что-то сделать с обработчиком успеха / сбоя, который вызывается после получения ответа.

Выглядит примерно так

   $(function() {
        $('selector').click(function() {
            var id = $('selector for id').val()
            $.ajax({
                type: "POST",
                url: "/Controller/VideoUpload",
                data: { memberId: id },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    $("selector for status").(msg);
                },

            });
        });
    });

Метод действия будет выглядеть примерно так, хотя это может быть не совсем точно.Вам также не обязательно делать это, поскольку запись ajax должна позволять запускать метод без браузера, ожидающего ответа.

   [HttpPost]
   public ActionResult VideoUpload(int memberId)
   {
       var status = Task.Factory.StartNew(() => _docRepo.SaveDocument(DocumentType.Video, Request.Files, memberId));
           return Json(new { success = true, status = status.Result});
   }
...