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

могу ли я увеличить 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});
  }

файлы могут быть очень большими, у меня есть increaset maxRequestLenght в интернете.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 ответов


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


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

используйте вызов jQuery ajax для вызова контроллера и параллельной библиотеки задач для сохранения документа. Вызов ajax может что-то сделать с обработчиком success/failure вызывается после получения ответа.

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

   $(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});
   }