在我的asp.net mvc 2应用程序中,我想知道实现这个的最佳方法:
我希望以最可能的方式执行此操作,这可能意味着尽可能轻松,IIS尽可能多地完成实际工作。
该服务需要处理GET请求,以及通过POST / PUT请求写入新文件。
请求是针对abitrary文件的,因此可能是:
获取http://storage.foo.com/bla/egg/foo18/something.bin
POST http://storage.foo.com/else.txt
现在我已经使用处理所有路由的IHttpHandler(使用routes.RouteExistingFiles = true)实现了一半,但不确定这是否是最好的,或者我是否应该挂钩到其他地方的生命周期?
我也有兴趣使用Range标头支持部分下载。使用
response.TransmitFile(finalPath);
因为我现在意味着我必须手动执行此操作,这似乎有点低级别?
非常感谢任何指针。
(IIS7)
答案 0 :(得分:0)
我认为在中间有一个自定义处理程序来处理这个问题,这正是你应该如何做的。
答案 1 :(得分:0)
TransmitFile是一种最轻量级的编程方式来提供我所知道的文件。
但是,您可能不需要编写自己的HttpHandler。您可以使用MVC处理程序,只需将控制器操作专用于作业。类似的东西:
http://storage.foo.com/Files/Download/SomeFileIdentifier
...路由到...
public FilesController
{
public ActionResult Download(string id)
{
//...some logic to authenticate and to get the local file path
return File(theLocalFilePath, mimeType);
}
}
我相信控制器的File()方法在后台使用TransmitFile。
(PS,如果您想要更短的网址,请通过global.asax中的自定义路由进行操作。)