我可以使用其他参数增加MVC Controller Action的ASP.NET请求的maxRequestLength吗?

时间:2011-11-08 10:52:34

标签: asp.net asp.net-mvc file-upload web-config filesize

我可以使用其他参数增加MVC Controller Action的ASP.NET请求的maxRequestLength吗?

我有一个带有ActionResult的UploadController,看起来像这样。

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

文件可能非常大,我在web.config中增加了maxRequestLenght并且可以上传文件,但我担心安全问题。所以我尝试了这个并且它不起作用:

 <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 个答案:

答案 0 :(得分:2)

MVC控制器操作不使用Web.config的location部分。见this answer for more information。您可以通过the MaxRequestLength property以编程方式增加它。

答案 1 :(得分:0)

您是否考虑过异步调用操作控制器方法,即使有可能调用新线程来保存文档,以便网页不等待响应并冒着超时的风险。

使用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);
                },

            });
        });
    });

Action Method看起来像这样,虽然这可能不准确。您不一定要这样做,因为ajax post应该允许方法调用执行而浏览器不等待响应。

   [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});
   }