C# 处理asp.net空web应用程序上的所有请求
我想处理所有的请求我无法处理具有扩展名的请求。让我告诉你我的意思 1) 首先让我向您展示我的web应用程序的功能:(非常简单) Web.configC# 处理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
<?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。