处理asp.net空Web应用程序上的所有请求

时间:2017-10-27 23:26:27

标签: c# asp.net web-applications http-status-code-404 global-asax

我想处理所有请求。 我无法处理具有扩展程序的请求。让我告诉你我的意思。

1)首先让我向您展示我的Web应用程序:(非常简单)

的Web.config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <customErrors mode="On" defaultRedirect="Handle404.aspx">
      <error statusCode="404" redirect="Handle404.aspx" />
    </customErrors>
    <compilation debug="true"/>
  </system.web>

</configuration>

Global.asax中

using System;

namespace DeleteMeWebAppliation
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            Console.Write("Test");
        }

        protected void Application_Error(object sender, EventArgs e)
        {
            Console.Write("Test");
        }
    }
}

Default.aspx的

using System;

namespace DeleteMeWebAppliation
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Console.WriteLine("test");
        }
    }
}

Handle404.aspx

using System;

namespace DeleteMeWebAppliation
{
    public partial class Handle404 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Console.Write("Test");
        }
    }
}

2)现在问题出现了:

注意我在所有行Console.Write("Test")上都有一个断点,我的目标是处理所有请求。 **换句话说,每当我向IIS发出请求时,无论网址是什么,我都想点击断点。

a)当我转到http://localhost:65284/ 工作(我遇到断点)

b)当我转到http://localhost:65284/SomeNoneExistingPage.aspx 工作(我遇到断点)

c)当我转到http://localhost:65284/Foooooo 工作时(我点了一个断点)

d)当我转到http://localhost:65284/Foooooo/fooo/fooo/test.aspx 工作(我遇到断点)

e)当我转到http://localhost:65284/foo.test 它失败(我没有碰到断点)为什么方法Application_Error上的断点没有命中!?

e)当我转到http://localhost:65284/foo/foo.jpg 它失败(我没有碰到断点)为什么方法Application_Error上的断点没有命中!?

总结一下,当有人前往http://localhost:65284/foo.test 时,如何执行自定义代码。一切都很好,但是当我去一个有'。'的网址的那一刻。在最后使用其他东西而不是aspx然后失败!

互联网上有很多地方展示了如何处理404错误但由于某种原因我无法使其发挥作用。

这是我去http://localhost:65284/foo.test时得到的404错误,由于某种原因我没有被重定向到404处理程序。如果链接以aspx结尾,我会被重定向。这毫无意义

enter image description here

2 个答案:

答案 0 :(得分:1)

找到解决方案。

Web配置看起来像:

<?xml version="1.0"?>
<configuration>

  <system.web>    
    <httpHandlers>
      <add verb="*" path="*" type="HandleAllRequestsHandler"/>
    </httpHandlers>
    <compilation debug="true"/>
  </system.web>
  <system.webServer>
    <handlers>
      <add verb="*" path="*" name="ImageWatermarkHandler" type="HandleAllRequestsHandler"/>
    </handlers>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>

</configuration>

现在我用这个处理程序处理所有请求:

using System;
using System.Web;

public class HandleAllRequestsHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Console.WriteLine("Test!");
    }

    public bool IsReusable => false;
}

注意我在这里处理所有请求,因为动词和路径的值为*。将自定义过滤器放在那里

答案 1 :(得分:1)

看起来您可以应用正确的解决方案。如果您仍然想知道以下问题的答案:

&#34; e)当我转到http://localhost:65284/foo.test它失败(我没有碰到断点)为什么方法Application_Error上的断点没有命中!?

e)当我转到http://localhost:65284/foo/foo.jpg它失败(我没有碰到断点)为什么方法Application_Error上的断点没有命中!?&#34;

这些未在您之前的配置中重定向的原因是该标记适用于有效的页面请求,并且只有在请求得到处理后才会应用#34;。您的请求永远不会超过IIS中的处理程序。

我认为以下说明了相对较好的流程:

https://docs.microsoft.com/en-us/iis/get-started/introduction-to-iis/introduction-to-iis-architecture/_static/image1.png

您的自定义处理程序HandleAllRequestsHandler将属于模块部分。