在IIS Express上调试ASP.NET时重复的请求

时间:2016-03-23 19:18:22

标签: c# asp.net iis owin iis-express

我在调试ASP.NET Web应用程序(.NET 4.6.1)时发现了一种奇怪的行为。每当发生HTTP错误(例如404或403)时,请求就会被复制到最多3次。

我使用fiddler测试了这个单一的问题,Intellitrace有效地向我显示了三个相同的请求(即使我只发送一个请求)。

Fiddler Intellitrace

我可以看到这个问题的影响,因为管道中的任何Owin中间件都被调用了三次。像这样的简单中间件:

app.Use(async (c, n) =>
{
    Debug.WriteLine("HIT!");
    await n.Invoke();
});

将连续打印三次" HIT!"进入控制台。

仅当请求生成错误时才会发生这种情况,而不是中间件处理请求时(例如,如果中间件以2XX状态代码响应则不会)。

发生了什么?

我在Win10上运行VS2015和IIS Express 10.

[编辑]它可能与我的Web.config配置有关?我正在添加摘录。

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" enableVersionHeader="false" />
</system.web>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <clear />
        </customHeaders>
        <redirectHeaders>
            <clear />
        </redirectHeaders>
    </httpProtocol>
    <security>
        <requestFiltering removeServerHeader="true" />
    </security>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

1 个答案:

答案 0 :(得分:2)

问题是由多个处理程序尝试在IIS Express中管理未处理的请求引起的。我通过在Web.config中删除它来解决它:

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrl-Integrated-4.0" />
        <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
    </handlers>
</system.webServer>