我可以使用其他参数增加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)
答案 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});
}