C#中Global.asax在IIS中不被执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中Global.asax在IIS中不被执行相关的知识,希望对你有一定的参考价值。

昨天让新加功能,实现伪静态,网站已经在服务器上运行。在之前的Global.asax 是没有写方法的,昨天用在Application_Start中调用RouteTable来实现,本地电脑VS调试没有问题,但是上传到服务器上却不行了,打开html页面直接显示页面不存在,表示代码没有被执行。服务器重启了N次,还是没有办法,有没有大神来帮我解决一下
今天我又在Session_Start里边调用了RouteTable,原来Application_Start里边没有删,出错,显示路由集合中已存在名为“Default”的路由。路由名称必须唯一。我想着是不是Application_Start已经执行了呢?那到底是什么问题呢? 下边的代码不是我不想手动输入,只是字数太多传不了

参考技术A

使用asp.net的路由出现404最可能的原因是并非Global.asax的代码没有被执行,而是IIS设置的问题.你在你的web.config里,路径是configuration / system.webServer下加一个节点

<modules runAllManagedModulesForAllRequests="true"></modules>

当然这么做的缺点是连同静态文件都要先从Global.asax中的路由表里匹配一遍,性能根据你路由表的大小有所降低,但是影响不是太大


追问

可是原来里边有这个节点啊

追答

服务器操作系统是什么?这个节点在iis7以上才有效,03下好像这个节点不需要,如果是iis7以上,麻烦贴一下你的Global.asax里的路由表,我测试下

追问

2003系统,IIS是6版本的。

写法如下

追答

把routes.Add那行改为
routes.MapPageRoute("3Dzhanshi", "3Dzhanshi.html", "~/3Dzhanshi.aspx", true);
试试

追问

还是不行。。还是显示
无法找到该页

Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是不是可用?

【中文标题】Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是不是可用?【英文标题】:Is Response.Redirect available in global.asax using IIS 7 Integrated Mode?Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是否可用? 【发布时间】:2012-03-15 07:47:06 【问题描述】:

我正在研究在集成模式下运行 IIS 7 时遇到的问题。我们有几个在 .net 3.5 中运行的应用程序。我们一直捕获和处理未处理异常的标准方法是利用 Global.asax 中的 Application_Error 方法(在这种情况下,未处理异常是一个 HttpException,它是在对不存在的 aspx 页面发出请求时创建的)。

在 Application_Error 内部,我们使用自定义错误处理将错误记录到数据库,发送警报电子邮件,然后重定向到指定的错误页面。错误记录和警报电子邮件按预期工作。重定向没有。

我使用 Fiddler 来查看请求/响应,我收到的 HTTP 302 页面与我的 customErrors 部分中的内容完全不同。

为什么 Response.Redirect 在 Application_Error 中不起作用?

到目前为止,这是我的代码:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim ex As System.Exception = Server.GetLastError
    Server.ClearError()

    If Not (TypeOf (ex) Is HttpException) Then
        //Run our internal error handling here
    Else
        Dim httpEx As HttpException = CType(ex, HttpException)
        Response.Clear()
        Response.StatusCode = httpEx.GetHttpCode()
        Response.TrySkipIisCustomErrors = True
        Server.Transfer("../Error.htm")
    End If
End Sub

当我尝试访问一个不存在的 aspx 页面时,它运行良好。但是,它不适用于静态页面。

我已经尝试了很多变体,以至于这段代码当前运行时没有 customErrors 或 httpErrors 部分。

【问题讨论】:

【参考方案1】:

如果要进入 IIS 错误页面,则需要将 TrySkipIisCustomErrors 设置为 true。

【讨论】:

我实现了这个并且它有效,但只有当我调用 Server.Transfer 到静态页面,而不是 aspx 页面时。任何想法为什么? @Chuck 你能发布你的 Application_Error 代码和你的 web.config 的 部分吗? 我会在早上发布。谢谢。

以上是关于C#中Global.asax在IIS中不被执行的主要内容,如果未能解决你的问题,请参考以下文章

Global.asax调试

IIS 6“超出最大请求长度。”在 Global.asax 之前触发 [重复]

在 IIS7 中使用 WAS 时 global.asax Application_Start 等效项是啥

ReferenceLoopHandling.Ignore 在 WebApi Global.asax 中不起作用

Global.asax文件说明

asp.net mvc global.asax文件详解