【发布时间】:2011-09-12 19:00:26
【问题描述】:
我在 ASP.NET MVC 3 中的文件上传遇到了最奇怪的问题。当我使用 Razor 使用默认项目模板(Internet 应用程序)启动一个新项目并将以下内容添加到 /views/home/index.cshtml
<form action="/Home/Index" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" />
<input type="submit" value="post" />
</form>
每当我尝试上传文件时,上传都会失败(萤火虫显示状态“已中止”)。一些额外的信息:
- Windows 7 / 64 位
- 卡西尼
- VS SP1
- Firebug 6.0.2 和 IE8 都会出现这种情况
控制器代码:
public class HomeController : Controller {
public ActionResult Index() {
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About() {
return View();
}
}
我已经调试了一段时间,并且已经发现了以下内容:
- 它只发生在文件 > ~120kb
- 如果我添加一个带有属性 [HttpPost] 的目标 Action 上传成功
- 如果我使用 fiddler 调试(代理)上传成功
- 如果我使用aspx并添加相同的代码,上传成功
- 对于 aspx/razor,所有文件都是相同的,除了(当然)/Views 中的文件而不是 /Views/Web.config 中的文件
有没有其他人遇到过这个问题,是什么原因造成的?
更新:我知道我应该使用单独的操作并用 HttpPost 标记它,这不是我问这个问题的原因。我正在寻找原因为什么这不起作用,而不是如何解决它。
【问题讨论】:
-
“如果我添加一个具有属性 [HttpPost] 的目标操作上传成功” 此处可能是一个愚蠢的问题,但您是否尝试将此发布到未明确标记为 HttpPost 的操作?如果是,有什么理由不想将其标记为 HttpPost?
-
所以当你做推荐的事情时(用 post/get/etc 装饰你的方法)它有效吗?去搞清楚?发布您的控制器代码怎么样?
-
这确实是我想要做的。我可以将其标记为 HttpPost,但我不应该这样做。我只是想弄清楚这种行为是设计使然(这似乎不太可能,因为没有任何错误报告),还是其他原因。
-
不,您不必“必须”,但可以 - 您“应该”将其标记为 httppost。如果你是回帖,你应该用[HttpPost]标记,你不应该为Get/Post共享相同的方法。它不是标准的,很容易导致问题。不 - 你没有“必须”,但你真的不应该。我怎么强调都不过分。如果您想采用其他方法共享相同方法,我无法提供其不起作用的内部原因,但恕我直言,当您偏离众所周知的推荐做法时,这只是一个教育问题。
标签: asp.net asp.net-mvc upload razor