Can I increase maxRequestLength of ASP.NET request for MVC Controller Action with additional parameters?

跟風遠走 提交于 2019-12-22 05:28:15

问题


Can I increase maxRequestLength of ASP.NET request for MVC Controller Action with additional parameters?

I have a UploadController with a ActionResult looking somthing like this.

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

The files can be very large, i have increaset maxRequestLenght in web.config and can upload the files, but im worried about the security issue. So i tried this and its not working:

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

Any ideas? (the upload method is using swfupload)


回答1:


MVC Controller Actions do not use the location section of the Web.config. See this answer for more information. You can increase it programmatically via the MaxRequestLength property.




回答2:


Have you thought about calling the action controller method asynchronously, even with the possibility of calling a new thread to save the document so that the web page isn't waiting on the response and risking a timeout.

Use a jquery ajax call to call your controller and Task Parallel Library to save the document. The ajax call can do something with the success/failure handler is called after getting the response.

Looks something like this

   $(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 would look something like this, though this may not be exact. You wouldn't necessarily have to do this either as the ajax post should allow the method call to execute without the browser waiting for the response.

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


来源:https://stackoverflow.com/questions/8049263/can-i-increase-maxrequestlength-of-asp-net-request-for-mvc-controller-action-wit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!