当前位置: 首页 > 知识库问答 >
问题:

IIS服务器上的PUT API调用期间未激发Application_BeginRequest

韩玉石
2023-03-14

背景

我有一个带有WebAPI组件的MVC应用程序。我使用jQuery和AJAX从WebAPI传递和接收数据。我依赖于在每次调用期间激发的Application_BeginRequest来执行一些普通任务。

问题

Application_BeginRequest始终激发对WebAPI的GET和POST调用。但是,当我对WebAPI进行PUT调用时,Application_BeginRequest不会激发,导致应用程序无法运行任务。PUT调用实际被接收,因为控制器中相应的方法正在被执行。

我已经将enabled放在web.config文件中(下面)。如何启用PUT方法调用以触发Application_BeginRequest方法?

注意:在使用IIS Express时,Application_BeginRequest会激发PUT调用,但在使用完整版本的IIS时不会激发。

项目:完整的项目可以在这里下载:beginRequestFail.zip

web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="PassThrough">
      <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <error statusCode="404" path="/Error/404" responseMode="ExecuteURL" />
      <error statusCode="403" path="/Error/403" responseMode="ExecuteURL" />
      <error statusCode="500" path="/Error/500" responseMode="ExecuteURL" />
    </httpErrors>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>
  </runtime>
</configuration>

global.asax.cs

protected void Application_BeginRequest(object sender, EventArgs e) //Not triggered with PUT
        {
            Application["BeginRequest"] = _Scounter++;
        }

共有2个答案

公冶嘉茂
2023-03-14

你的代码管用。不确定你的柜台,所以我把它改成:

public class MvcApplication : System.Web.HttpApplication
{
    public static int BeginRequestCounter = 0;

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        BeginRequestCounter++;
    }
}

null

<p>@BeginRequestFail.MvcApplication.BeginRequestCounter</p>

null

null

穆景辉
2023-03-14

转到IIS功能模式--&>;单击“处理程序映射”--&>;滚动列表并找到无扩展URL处理程序--&>;检查该处理程序之前的所有处理程序,以查看是否有任何其他东西被注册到处理程序PUT请求,从而在它命中无扩展url处理程序之前劫持PUT。希望那会有帮助

 类似资料:
  • 我有一个非常简单的集成流程: 服务激活器调用的方法尝试将消息中的数据与数据库中的某些数据相匹配。如果是,则返回匹配的数据。如果没有,它将返回。 如果我没有设置必需回复为真,那么回复似乎会从集成流中消失,导致服务接口永远不会返回,从而导致应用程序挂起。如果我设置了必需回复为真,我至少会得到一个异常,但是应用程序仍然挂起,因为网关的服务接口永远不会返回: spring集成参考资料中似乎没有记录这种行为

  • 我有几个onvif ip camera连接到网络,里面有一个IIS服务器。我想允许客户端流到网络内的任何ip摄像机,但它必须通过IIS服务器。 因此,基本上每个ip摄像机都将以单个流的形式流到IIS服务器上,IIS服务器将重新分配给多个请求它的客户端。我的问题是如何设置iis服务器以适应这种情况?以及一个ffmpeg命令行从rtsp ip camera读取并发送给iis服务器的示例,iis服务器将

  • 带有服务工作者的网站,托管https://121eddie.github.io/并在Chrome 66.0中运行。3359.181 /索引。html在每次加载时正确跟踪以下注册 }); 第一次运行时,/serviceWorker。js执行“激活”事件,正确获取缓存名称并缓存文件 在第二次运行时,不会触发“激活”(没有日志跟踪,没有获取)。 在第三次运行中,甚至不再触发“抓取”。这意味着脱机请求不被

  • 我有一个队列通道和一个带有轮询器的服务激活器,轮询器从该队列中读取数据。我希望配置为“我希望50个线程轮询该队列,每次轮询并返回消息时,在此线程上调用服务激活器指向的服务。” 该服务没有异步注释,但无状态,可以以并发方式安全运行。 下面的方法能做到吗?有没有其他首选的方法来实现这一点?

  • 问题内容: 尝试使用go与postgres数据库通信,准备如下语句: 引发以下错误: 有什么办法吗? 如果需要,我可以添加更多信息。 问题答案: 您应该建立没有SSL加密的数据库连接,如下所示:

  • 根据这个博客 https://spring.io/blog/2015/07/14/microservices-with-spring 能够顺利运行应用程序。按此顺序: java-jarmicroservice-demo-0.0.1-SNAPSHOT.jar注册1111 java-jarmicroservice-demo-0.0.1-SNAPSHOT.jar帐户2222 java-jarmicros