使用ASP.NET MVC 3和Razor实现ASHX处理程序

8
我想在ASP.NET MVC 3中使用Silverlight多文件上传器。问题是我需要使用ashx处理程序来处理文件上传(该处理程序是库的一部分)。我该如何将处理程序与ASP.NET MVC 3集成(我正在使用Razor视图引擎)?
2个回答

16

我猜想这是因为它是一个(更早的?)第三方库的一部分,只需按照指示在web.config中进行配置即可。您可以通过忽略*.ashx的路由来忽略对其的请求。您应该能够使用类似以下内容的代码实现,但我自己没有尝试过:

routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");

1
这个完美地运行了。谢谢!我所需要做的就是将ashx文件添加到网站的根目录中,并将上面提到的那一行添加到Global.asax中,它就可以工作了! :D - kubal5003
@kubal5003 你是怎么做到的?web.config 文件中的 xml 是什么样子的? - Demodave

9
问题在于我需要使用ashx处理程序来处理文件上传。
谁告诉你需要使用处理程序?你可以在控制器操作中完成处理程序所能完成的一切操作。如果必要,你甚至可以访问原始的 `Request.InputStream`。

1
即使在处理多文件上传时,您也可以使用 ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 方法。而且,HTML 5 支持多文件上传 <input type="file" name="files" id="fileUpload" multiple="true" /> - Major Byte
@Major Byte,这将取决于Silverlight控件是否发送了multipart/form-data编码请求。如果没有,您将不得不手动解析它。 - Darin Dimitrov
2
如果有可以重复利用的代码,为什么还要写新代码呢?这正是你所需要的。我不想编写自定义操作或结果类型等内容,而是希望重复使用现有的代码。 - kubal5003
1
@kubal5003,如果您想要重用现有的代码,那么您需要将其与当前应用程序集成在一起吗?个人建议重新调整它。在具有控制器操作的ASP.NET MVC应用程序中使用原始http处理程序是不符合良好实践的。根据您的要求和您试图实现的确切内容,使用处理程序会更加困难或容易。 - Darin Dimitrov
1
我同意创建自定义控制器通常是首选的方法,但是我现在没有时间处理它。使用原始处理程序的解决方案运行良好,并且可能会更快,因为ASP.NET MVC本身就是一个处理程序(差异可能微不足道,这不是我的目标)。 - kubal5003
在MVC结果控制器中使用分段请求流式传输MP4并不容易。使用通用处理程序,您可以更灵活地控制响应/请求,同时减少开销。特别是在向多个位置提供视频时。 - Piotr Kula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接