Asp.net mvc 为什么httphandler没有运行

Asp.net mvc 为什么httphandler没有运行,asp.net-mvc,asp.net-mvc-4,httphandler,iis-express,Asp.net Mvc,Asp.net Mvc 4,Httphandler,Iis Express,我已经为ASP.NET MVC4站点编写了一个生成映像的httpHandler。未调用ProcessRequest函数。有什么想法吗 MVC4、IIS Express、Windows 8 Pro Web.config>system.webServer <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> &l

我已经为ASP.NET MVC4站点编写了一个生成映像的httpHandler。未调用
ProcessRequest
函数。有什么想法吗

MVC4、IIS Express、Windows 8 Pro

Web.config>system.webServer

 <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="TextImage" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <add name="TextImage" path="textimage/*.png" verb="*" resourceType="Unspecified" type="MultiStepUI.TextImageHandler, MultiStepUI_MOBETTER" />
    </handlers>
  </system.webServer>

用法

<img src="/textimage/step1.png?q=Step 1&c=404040&w=30&h=250&z=12" />

如果你知道要找什么,你可以在网上找到答案

MVC路由引擎尝试将所有请求映射到一个控制器——在本例中,这不是我们想要的。除了在Web.config中注册处理程序外,我们还需要告诉MVC路由引擎忽略httpHandler
path
,以便ASP.NET引擎可以处理其路由

我选择了使用

为了对抗链接腐败,这是文章的摘录

<img src="/textimage/step1.png?q=Step 1&c=404040&w=30&h=250&z=12" />
默认情况下,ASP.NET路由将忽略对不符合要求的文件的请求 存在于磁盘上。我在上一篇文章中解释了原因 即将进行的路由更改。长话短说,我们不想 尝试路由对静态文件(如图像)的请求。 不幸的是,这让我们想起了很多 ASP.NET的功能会请求上不存在的.axd文件 磁盘

为了解决这个问题,我们在 RouteCollection,IgnoreRoute,用于创建映射到 StopRoutingHandler路由处理程序(实现 IRouteHandler)。实际上,任何与“忽略”匹配的请求 路由将忽略“路由”,并且将忽略正常的ASP.NET处理 基于现有http处理程序映射发生。因此,我们违约 模板,您会注意到我们定义了以下路线

routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”)

这就解决了这个问题 标准。axd请求。但是,在其他情况下,您可能会 请求磁盘上不存在的文件。例如,如果你 将HTTP处理程序直接注册到实现 伊特芬德勒。更不用说浏览器对favicon.ico的请求了 自动生成。ASP.NET路由尝试路由这些请求 到控制器。解决这个问题的一个方法是添加适当的忽略 route,指示路由应忽略这些请求。 不幸的是,我们不能这样做:

{*path}.aspx/{*pathinfo}

我们只允许一条通吃路线,而且必须 发生在URL的末尾。但是,您可以采取以下措施 方法在本例中,我添加了以下两条路线

routes.IgnoreRoute(“{*allaspx}”,新的{allaspx=@.*\.aspx(/.*)”})
routes.IgnoreRoute(“{*favicon}”,new{favicon=@”(.*/)?favicon.ico(/.*)”})

我在这里做的是一个 Eilon向我展示了将所有URL映射到这些路由的技术, 然后通过约束限制要忽略的路由 字典。因此,在这种情况下,这些路由将匹配(因此忽略) favicon.ico的所有请求(无论哪个目录)以及 请求一个.aspx文件。因为我们告诉routing忽略这些 请求时,将进行这些请求的正常ASP.NET处理


前面的答案是正确的,但这篇文章是根据这里的摘录编辑的。ignore语句应为:

routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
请注意{*allaspx}和{*favicon}字符串中的“*”在原始字符串中丢失。
我无法让它工作,直到我遵循了更新文章中的链接和示例。

好吧,谢谢tmack的链接解释了什么是httphandler。不幸的是,这与我的问题毫无关系。给赛尔夫记下,停止略读。不过这本书读得不错。谢谢。这应该被标记为答案。这篇文章有这样的更正:“默认情况下,ASP.NET路由忽略对磁盘上确实存在的文件的请求。”弗兰克,谢谢你指出这一点。这篇文章没有编辑。我没有捕捉到它,但是如此降价的渲染器认为块引号中的
*
是格式化的,而不是内容。我已经跳过了正确的符号,现在块引号的内容应该与预期的内容匹配-即使现在块引号后面的“实际”内容与呈现的内容不同。。。如果这有意义的话。