【问题标题】:Creating HTTP Handler创建 HTTP 处理程序
【发布时间】:2012-05-23 11:52:50
【问题描述】:

谁能告诉我如何创建自定义处理程序 (.ashx) 文件。 要求:当我的应用程序请求 .pdf 时,我想调用该 .ashx 处理程序。 .ashx 处理程序将具有显示或不显示文件的逻辑。

我的传入路径是“http://www.domainname.com/Content/PDF/ABC.pdf”。 此 URL 应由“http://www.domainname.com/Handler.ashx”文件处理。

我想知道如何在我的应用程序中创建、映射和注册处理程序

提前致谢。

【问题讨论】:

    标签: asp.net-mvc-3 httphandler


    【解决方案1】:

    如果您使用 ASP.NET MVC,为什么需要 HTTPHandler,请使用 Action 方法来处理您的文件内容。您可以在 Action 方法中使用 HttpHandler 完成大部分操作。您可以根据需要进行操作的路由,例如 http://domainname.com/content/abc 可以返回 abc.pdf 文件

    您不应直接让浏览器访问资源 (PDF)。相反,您可以通过 action 方法授予访问权限。从请求中读取action方法中的文件Id/name,读取文件并输出。假设您的ResourceController 中有如下操作方法

    public ActionResult GetFile(string id)
    {
       string fullFilePath=somefullpathvariable+"//"+id+".pdf";
       return File(fullFilePath, "application/pdf", Server.UrlEncode(id+".pdf"));
    }
    

    现在用户可以像这样访问它

    http://www.yourdomain.com/Resource/awesomemvc
    

    现在这可以从存储在您的服务器中的位置返回一个名为 awesomemvc.pdf 的文件,并且您的 someFullPathVariable 保存到该位置的路径

    【讨论】:

    • 我最初只选择了 mvc 路由解决方案。但是!!,我的 url "domainname.com/Content/PDF/ABC.pdf" 直接被执行并且不通过定义的路由。路线.RouteExistingFiles = true; routes.MapRoute("PDFRoute", "Content/PDF/{id}", new { controller = "User", action = "GetPdf", id = UrlParameter.Optional});
    • @shakti:如果您通过操作方法公开它,它将通过。请参阅我的更新答案。
    • 请理解我的要求:在 Google 搜索中我的应用程序 url 显示。我希望只有登录的客户才能访问该网址。网址是domainname.com/Content/PDF/ABC.pdf(带有.pdf,扩展名)现在我想将它路由到我的控制器和操作。为此,我已经编码。路线.RouteExistingFiles = true; routes.MapRoute("PDF","Content/PDF/{id}",new { controller = "User", action = "GetPdf" });然后pdf文件也直接打开而不通过我定义的路线。我在示例项目中添加了相同的代码,它在那里工作。(奇怪!!!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多