我一直在开发一个托管在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中,我尝试添加托管处理程序:
请求的路径:&#39; * .XmlDataTypes&#39; 输入:,选择&#39; XmlDataTypes&#39; 名称: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找不到错误。
提前感谢您的帮助。
学家
答案 0 :(得分:1)
看起来这些是您磁盘上的文件。如果是这样,您的解决方案可以简单到将以下内容添加到&#34; system.webServer &#34;下的web.config中。
<staticContent>
<mimeMap fileExtension=".XmlAmenityData" mimeType="application/xml" />
<mimeMap fileExtension=".XmlDataTypes" mimeType="application/xml" />
</staticContent>
那就是它。
但是,如果您真的依赖HTTP处理程序,请注意&#34; Type&#34;需要至少使用程序集名称完全限定。
因此您的类型也需要包含命名空间。
在你的代码中,&#34; XmlHandler&#34;没有完全限定命名空间,并且没有提到程序集。确保它是。
最后,更改&#34; resourceType&#34;到&#34;未指定&#34;或IIS将在执行处理程序之前确保文件真正存在。
答案 1 :(得分:0)
我在这里找到的答案或者stackoverflow上的类似问题都没有给我带来帮助。
我使用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");
我让它忽略了对我的处理程序的请求。
希望这有助于某人 - 我正在撕扯我的头发!