ASP.Net 将自定义 HTTP 处理程序移动到 IIS 8.5

ASP.Net moving custom HTTP handlers to IIS 8.5

我一直在开发一个托管在 IIS 6 上的应用程序,我们刚刚升级了使用 IIS 8.5 的服务器,但无法让它在新服务器上运行。

应用程序有一个自定义处理程序,当请求扩展名为 .XmlDataTypes 的文件时调用该处理程序。

为了在 IIS6 中工作,我将映射设置为:

扩展名:“.XmlDataTypes” 路径:'C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' 动词:所有。

在Web.config中:

<httpHandlers>
  <add verb="*" path="*.XmlAmenityData" type="XmlHandler"/>
  <add verb="*" path="*.XmlDataTypes" type="XmlDataTypes"/>
</httpHandlers>

这很好用。

在 IIS8.5 中,我尝试添加一个托管处理程序:

请求的路径:'*.XmlDataTypes' 类型:,已选择 'XmlDataTypes' 名称:XmlDataTypes

然后添加到 web.config 文件:

<system.webServer>
    <handlers>
        <add name="XmlAmenityData" path="*.XmlAmenityData" verb="*" type="XmlHandler" resourceType="File" preCondition="integratedMode" />
        <add name="XmlDataTypes" path="*.XmlDataTypes" verb="*" type="XmlDataTypes" resourceType="File" preCondition="integratedMode" />
    </handlers>
</system.webServer>

当我 运行 一个页面通过 jQuery 函数请求扩展名为 .XmlDataTypes 的 URL 时,我只收到 404 not found 错误。

在此先感谢您的帮助。

J.

看起来这些是您磁盘上的文件。如果是,您的解决方案可能很简单,只需将以下内容添加到“system.webServer”下的 web.config。

<staticContent>
    <mimeMap fileExtension=".XmlAmenityData" mimeType="application/xml" />
    <mimeMap fileExtension=".XmlDataTypes" mimeType="application/xml" />
</staticContent>

就是这样。

但是,如果您真的依赖 HTTP 处理程序,请注意 "Type" 至少需要使用程序集名称进行完全限定。

因此您的类型还需要包含命名空间。

在您的代码中,"XmlHandler" 没有完全限定命名空间,也没有提到程序集。确保它是。

最后,将 "resourceType" 更改为 "Unspecified" 否则 IIS 将在执行您的处理程序之前确保文件确实存在。

None 我在这里找到的答案或在 Whosebug 上的类似问题上对我有用。

我正在使用 IIS 8.5, .Net v4.0, Integrated,并且仍然使用以下处理程序配置获得 404:

<system.webServer>
    <handlers>
       <add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>


我启用了跟踪并发现了以下内容:

116. -HANDLER_CHANGED 

    OldHandlerName              testEmail 
    NewHandlerName              System.Web.Mvc.MvcHandler 
    NewHandlerModules           ManagedPipelineHandler 
    NewHandlerScriptProcessor
    NewHandlerType              System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 


如您所见,它似乎已使用我的自定义 HttpHandler testEmail 正确接收到请求,但 MVC 已窃取它
我在 RouteConfig.cs 中打开我的路由定义,发现添加:

   routes.IgnoreRoute("{resource}.em");

我让它忽略了对我的处理程序的请求。
希望这对某人有所帮助 - 我正在撕扯我的头发!