Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理asp.net空web应用程序上的所有请求_C#_Asp.net_Web Applications_Http Status Code 404_Global Asax - Fatal编程技术网

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

C# 处理asp.net空web应用程序上的所有请求,c#,asp.net,web-applications,http-status-code-404,global-asax,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" re

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

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>
Default.aspx

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");
        }
    }
}
using System;

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

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

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");
        }
    }
}
using System;

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

namespace DeleteMeWebAppliation
{
    public partial class Handle404 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Console.Write("Test");
        }
    }
}
2) 现在问题来了: 注意我在控制台的所有行上都有一个断点。写(“测试”)我的目标是处理所有请求**换句话说,无论url是什么,每次向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
失败(我没有遇到断点)为什么方法应用程序上的断点没有遇到错误

e) 当我转到
http://localhost:65284/foo/foo.jpg
失败(我没有遇到断点)为什么方法应用程序上的断点没有遇到错误

总之,当有人转到
http://localhost:65284/foo.test
例如。一切都很好,但当我转到一个带有“.”的url,而不是在最后使用aspx时,它就失败了

互联网上有很多地方展示了如何处理404错误,但由于某些原因,我无法让它工作


这是我进入
http://localhost:65284/foo.test
我收到一个404错误,由于某种原因,我没有被重定向到404处理程序。如果链接以aspx结束,我将被重定向。这毫无意义

找到了解决方案

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>

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

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

“e)当我转到它失败时(我没有遇到断点),为什么方法应用程序上的断点没有遇到错误

e) 当我转到它失败时(我没有遇到断点),为什么方法应用程序上的断点没有遇到错误!“

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

我认为以下内容比较好地说明了流程:


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

我正在运行IIS版本10。当我将其发布到IIS服务器时,以及在IIS ExrPress上运行时,都会发生这种情况web浏览器在加载
http://localhost:65284/foo/foo.jpg
?听起来您需要启用RAMFAR。