【问题标题】:Handle all requests on asp.net empty web application处理 asp.net 空 Web 应用程序上的所有请求
【发布时间】:2018-04-09 15:08:05
【问题描述】:

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

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 发出请求时都打断点,而不管 url。

a) 当我转到 http://localhost:65284/ It Works(我遇到了断点)

b) 当我转到 http://localhost:65284/SomeNoneExistingPage.aspx It Works(我遇到了断点)

c) 当我转到 http://localhost:65284/Foooooo It Works(我遇到了断点)

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

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 结尾,我会被重定向。没有意义

【问题讨论】:

  • 我运行的是 IIS 版本 10。当我将它发布到 IIS 服务器以及在 IIS Exrpress 上运行时,就会发生这种情况
  • 网页浏览器在加载http://localhost:65284/foo/foo.jpg时会显示什么?
  • 听起来你需要启用 RAMFAR。

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


【解决方案1】:

找到了解决办法。

网络配置如下:

<?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;
}

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

【讨论】:

    【解决方案2】:

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

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

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

    这些在您之前的配置中没有重定向的原因是该标签适用于有效的页面请求,并且只有在请求得到“处理”后才会应用。您的请求从未通过 IIS 中的处理程序。

    我觉得下面这个流程比较好说明:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多