【发布时间】:2016-04-21 11:13:00
【问题描述】:
您好,我正在使用 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。此问题的任何解决方法。
【问题讨论】:
-
什么失败了?有一个问题。去那里了吗?
-
@Asken 当我在本地运行解决方案时它工作得很好,问题是在服务器中发布代码后出现的。
-
需要更多数据...可以是任何数据。您必须查看 iis 日志。你也可以尝试让一个死的简单模块返回类似字符串的东西,看看它是否有效。如果有对外部站点的调用,您可能必须确保您有权这样做。如果您可以控制服务器,可以尝试设置
<trust level="Full" />。 -
@lincolnk 你能帮忙吗
-
@Asken 问题似乎是因为 IIS 7.0 处于经典模式。有任何解决方法吗?
标签: c# asp.net asp.net-mvc iis asp.net-web-api