对每个请求执行身份验证的最佳方法

时间:2010-05-31 12:23:52

标签: asp.net asp.net-mvc iis

在我的asp.net mvc 2应用程序中,我想知道实现这个的最佳方法:

  • 对于每个传入的请求,我需要在允许提供文件之前执行自定义授权。 (这是基于查询字符串的标题和内容。如果您熟悉Amazon S3如何进行其他身份验证 - 正是如此)。

我希望以最可能的方式执行此操作,这可能意味着尽可能轻松,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)

2 个答案:

答案 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中的自定义路由进行操作。)