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");
我让它忽略了对我的处理程序的请求。
希望这对某人有所帮助 - 我正在撕扯我的头发!
我一直在开发一个托管在 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");
我让它忽略了对我的处理程序的请求。
希望这对某人有所帮助 - 我正在撕扯我的头发!