我正在开发一个Silverlight录像机,我需要在录制过程完成后将数据从流上传到Web服务器。 在服务器端,我使用的是ASP.NET MVC 3,我使用FileUpload方法创建了一个Controller。
public class FileUploaderController : Controller
{
[HttpPost]
public ActionResult FileUpload(string fileName)
{
....
}
}
在silverlight applet中,上传是由部分组成的,大约20000个字节。服务器Web配置配置为接受更大量的数据。 服务器返回异常“远程服务器返回错误:NotFound。”。
在这种情况下,请求尚未到达操作,我无法理解原因。
用于开始上传的代码示例:
UriBuilder httpHandlerUrlBuilder = new UriBuilder("http://localhost:37386/FileUploader/FileUpload/?fileName=" + Guid.NewGuid() + ".wav");
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(httpHandlerUrlBuilder.Uri);
webRequest.Method = "POST";
webRequest.ContentType = "multipart/form-data"; // This solved my problem
webRequest.BeginGetRequestStream(new AsyncCallback(WriteToStreamCallback), webRequest);
修改
我的路线配置默认为:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
当发送少量数据时,一切顺利,服务器接收请求的数据。但是当要发送的数据较大时,我只是得到NotFound响应。这对我没有任何意义,我正在做的是:
在我的情况下,我从不发送超过20000个字节,这有点奇怪,有时候工作而其他人没有。
我不知道更好的方法来解释这个问题。如果您需要,我可以提供更多代码和更多信息。
非常感谢任何帮助。
答案 0 :(得分:0)
使用filddler,我能够获得有关错误的更详细信息。这是“从客户端检测到上传文件潜在危险的Request.Form值...”。
要解决此问题,我已将webRequest的内容类型指定为“multipart / form-data”