当没有.asmx扩展名时,为什么我会获得HTTP 404?

时间:2011-03-24 13:13:45

标签: .net asp.net windows iis

我正在尝试编写HTTP GET处理程序。路径应以http://site/processTask开头,并具有一组URL编码参数。我的web.config中有以下内容

<httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    <add verb="GET" path="processTask*" type="MyHandler.ProcessTaskHandler, MyHandler"/>
</httpHandlers>

现在,当我在浏览器中输入网址http://mysite/processTask时,我会获得HTTP 404,但如果我将add verb行更改为以下内容:

<add verb="GET" path="processTask.asmx*" type="MyHandler.ProcessTaskHandler, MyHandler"/>

并在浏览器中输入http://mysite/ProcessTask.asmx运行处理程序,我从处理程序获得响应。

有什么问题?为什么处理程序仅在路径包含.asmx时运行?如何更改web.config以便不需要.asmx

1 个答案:

答案 0 :(得分:3)

当路径只是 / processTask (没有扩展名)IIS 首先无法理解它必须将请求传递给ASP.NET ,尤其是在IIS 5.1上,该文件不是由ASP.NET处理,而是仅从磁盘提供(并且没有这样的文件,因此HTTP 404)。

为了能够做到这一点,您需要设置IIS以使用ASP.NET

处理所有文件

在IIS 5.1上,右键单击根目录,打开“网站属性”|主页目录|配置,并将*.aspx(或已由ASP.NET处理的任何其他扩展)的设置复制/粘贴到.*的新扩展,并取消选中&#34;验证文件存在&#34;复选框那里。 Here's a step-by-step guide针对类似问题。