我正在开发一个ASP.NET MVC 3应用程序,我正在使用SWFUpload来提供基于ajax的文件上传。生产环境是Windows Azure。在IISExpress和Windows Azure模拟器下运行的本地盒子上一切正常。但是当我将它发布到Azure时,我得到 ArgumentException,声明参数字典包含空条目。
这是通过查看来源的post_params片段。
post_params: {
surveyResponseId: '1918f3c3-0764-4a6a-a308-5d2180ca2eb1',
personId: 'f5fce116-f059-48bc-be79-ad859259ffd8',
surveyId: 'd1fa576d-d348-43e3-82ce-952f74fb0d72'
}
当我用Fiddler2查看操作时,我得到状态码为504.其他研究表明504是Fiddler说它有问题。但我可以检查请求,它包括所有发布的参数。
POST http://...
Accept: text/*
Content-Type: multipart/form-data; boundary=----------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
User-Agent: Shockwave Flash
Content-Length: 109580
Connection: Keep-Alive
Pragma: no-cache
------------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
Content-Disposition: form-data; name="Filename"
myimage.jpg
------------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
Content-Disposition: form-data; name="surveyResponseId"
1918f3c3-0764-4a6a-a308-5d2180ca2eb1
------------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
Content-Disposition: form-data; name="surveyId"
d1fa576d-d348-43e3-82ce-952f74fb0d72
------------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
Content-Disposition: form-data; name="personId"
f5fce116-f059-48bc-be79-ad859259ffd8
------------GI3cH2ei4Ef1Ij5Ij5cH2Ef1GI3GI3
Content-Disposition: form-data; name="Filedata"; filename="myimage.jpg"
Content-Type: application/octet-stream
有什么想法吗? 谢谢,
2012年1月1日更新
如果删除参数和操作方法签名,文件将成功上传。
答案 0 :(得分:0)
有时,如果文件太大,IIS可能会阻止文件上传。您可以更改web.config中允许的最大文件大小,如此链接所示。 http://www.websupergoo.com/helpupload50/source/2-tech_notes/3-web.config.htm。这可能是您的问题,也可能不是,但值得一试。
答案 1 :(得分:0)
仍然不确定问题究竟是什么,但我确实找到了解决方法。问题出在模型绑定中。如果我从Action方法中删除参数,然后使用Request对象提取文件和表单属性。
var workItemId = Request.Form["surveyResponseId"];
var arrivalId = Request.Form["surveyId"];
var personId = Request.Form["personId"];
var file = Request.Files[0];
因此正确地发布了所有必需的值,只是模型绑定无法正确地将它们与参数相关联。仍然不确定为什么它在测试中起作用,但不在生产中。