使用IHTTP模块进行Web Api呼叫

时间:2016-04-21 11:13:00

标签: c# asp.net asp.net-mvc iis asp.net-web-api

您好我正在使用HttpModule来调用WebAPI。 目前解决方案在系统本地工作但是一旦我在服务器中发布了代码,它就无法进行API调用。这是示例代码:

   public class AppModule: IHttpModule
{
     public void Init(HttpApplication httpApp)
    {
        httpApp.BeginRequest += OnBeginRequest;
        httpApp.EndRequest += OnEndRequest;
        httpApp.PreSendRequestHeaders += OnHeaderSent;
    }
      public void OnBeginRequest(Object sender, EventArgs e)
            {
                try
                {
                    var httpApp = (HttpApplication)sender;
                    if (httpApp.Request.Path.StartsWith("/media/")) return;
                    string a = httpApp.Request.ServerVariables["ID"];
                    if (String.IsNullOrEmpty(a))
                    {
                        a = System.Configuration.ConfigurationManager.AppSettings["ID"];
                    }
                    var absolutepath = httpApp.Request.Url.AbsolutePath;
                    var values = new Dictionary<string, object>
                    {
                        { "ID", a },
                        { "Browser",httpApp.Request.Browser["Type"] },
                        { "Url",httpApp.Request.Url.Scheme + "://" + httpApp.Request.Url.Authority + absolutepath},
                        { "OperatingSys",httpApp.Request.Headers["User-Agent"] },
                        { "IPAddss",httpApp.Request.UserHostAddress },
                        { "LDate",System.DateTime.Now.ToString() },
                    };

                        var serializer = new JavaScriptSerializer();
                        var appData = serializer.Deserialize<DataVO>(serializer.Serialize(values));
                        AppModuleVO objAppModuleVO = new AppModuleVO();
                        //AppModuleVo has all the properties.
                        objAppModuleVO.WebUrl = System.Configuration.ConfigurationManager.AppSettings["APIURL"] + MethodCall;
                        objAppModuleVO.objDataVo = appData;
                        ThreadPool.QueueUserWorkItem(new WaitCallback(HandlePostRequest), objAppModuleVO);

                }
                catch (Exception ex)
                {

                }
            }
}

我在Web.Config中注册了相同的内容

<system.web>
    <httpModules>
        <add name="AppModule" type="Fighter.Modules.AppModule"/>
    </httpModules>
</system.web>
<system.webServer>
    <modules>
        <add name="AppModule" type="Fighter.Modules.AppModule"/>
    </modules>
</system.webServer>

我不确定在服务器中发布代码后是否需要在IIS服务器中进行任何更改或注册。注意:我还在服务器中部署了API并提供了正确的路径,因为其他方法可以调用被排除的相同API 。请帮助。问题似乎是因为 IIS 目前我在管理管道模式下使用IIS 7.0作为 CLASSIC 。此问题的解决方法。

1 个答案:

答案 0 :(得分:0)

渴望发表评论,请在您的web.config中尝试:

....
<system.webServer>
    <modules>
        <add name="AppModule" type="Fighter.Modules.AppModule"/>
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

说过你应该考虑使用IntegratedMode。