【问题标题】:HttpHandler on a file in ASP.NET MVCASP.NET MVC 中文件上的 HttpHandler
【发布时间】:2011-03-27 01:37:55
【问题描述】:

我有以下设置。我有一个 Web 应用程序,在这个应用程序的 .css 中,我定义了一个背景图像,当我将鼠标悬停在某个元素上时要呈现。

我想要一个位于服务器上的脚本或类似的东西,当访问图像时,它会调用应用程序上的操作。不幸的是,我不知道从哪里开始。

我想知道是否以及如何编写一个服务器端组件,该组件根据 css 对文件的请求在 Web 应用程序中执行操作。

我在 Windows7 上,ASP.NET MVC。

编辑

所以,我听从了您关于使用 httpHandlers 的建议。这似乎是一个完美的解决方案。但是,我遇到了问题。

我已经关注了这个非常有用的链接http://www.phpvs.net/2009/08/06/aspnet-mvc-how-to-route-to-images-or-other-file-types/,但我只是无法在路线上获得成功

routes.Add("ImageRouting", new Route("Content/themes/base/images/{filename}.png", new ImageRouteHandler()));

我唯一的其他路由是 MVC 模板默认生成的路由。

所以我发现 MVC 默认不处理对文件的请求。所以我必须通过将RouteCollectionRouteExistingFiles 属性设置为true 来解决这个问题。

现在我的图像得到了适当的点击,但由于某种原因,位于 Content 文件夹中的 Site.css 不用于设置生成的 html 的样式。

有什么建议吗?

【问题讨论】:

  • 当客户端请求图像时,您的意思是“访问图像时”吗?那会破坏例如如果浏览器预加载资源。你想达到什么目标,你在操作系统和网络服务器上吗?

标签: asp.net css asp.net-mvc scripting httphandler


【解决方案1】:

在您的 machine.config 或 web.config 中添加一个 HttpHandler,如下所示:

<httpHandlers>
    <add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" />
<httpHandlers>

你的动词可以是“*”或“GET”,设置路径等于你的图像文件在服务器上的位置,并根据你的命名空间、类和处理函数填充类型变量。

更详细的解释见: http://www.15seconds.com/issue/020417.htm

【讨论】:

    【解决方案2】:

    如果您使用asp.net,您可以定义ashx 处理程序,将图像提供给客户端,并执行您想要的任何操作。您可以在此处阅读更多内容:

    【讨论】:

      【解决方案3】:

      如果您的焦点是 CSS 文件中的图像,您可以让脚本处理 CSS 文件中使用的图像的服务,但这不会在每次访问者将鼠标悬停在某个元素上时触发,更不用说每次加载时由于缓存而导致的新页面,除非您有一些严格的无缓存规则。

      如果您对每次有人悬停某个元素时更感兴趣,您可以触发 AJAX 请求并从那里开始。

      $('.some-element').hover(function(){ $.get("spy.aspx"); });
      

      【讨论】:

      • 我只对 css 方式感兴趣,但感谢有关缓存的有用提示。
      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多