忽略 .asp 页的传送 Asp.Net 4.0 传送
本文关键字:传送 Net Asp 忽略 asp | 更新日期: 2023-09-27 18:31:33
我的global.asax中有这个MapPageRoute:
RouteTable.Routes.MapPageRoute("TestPages", "{file}", "~/Test/{file}");
它基本上说,如果请求任何文件,它会转到测试文件夹。但是我想限制它,以便仅在 URL 中不存在 asp 扩展时执行此规则。因此,如果用户键入 Test.asp,则不应进行 URL 路由。但是,如果它像http://www.something.com/Test/
应该执行这条路由。
我怎样才能做到这一点?
要忽略路由,请尝试使用以下方法:
RouteTable.Routes.Ignore("{resource}.asp/{*pathInfo}");
将".asp"更改为要过滤的类型。
我为此目的使用约束。例:
routes.MapPageRoute("CMS", "{*friendlyUrl}", "~/index.aspx", true, null, new RouteValueDictionary { { "incomingUrl", new CatchallConstraint() } });
其中 CatchallContraint 是一个必须实现 IRouteConstraint 的类。
在 Match 方法中,只需检查文件扩展名,如果是 asp 扩展名,则返回 false。
这是我的实现(vb.net) - 它比你需要的要多一点,因为它可以在 web.config 中配置,但你明白了。
公共类捕获约束 实现 System.Web.Routing.IRouteConstraint
''' <summary>
''' If AppSettings: CatchallIgnoredExtensions doesn't exist, these are the default extensions to ignore in the catch-all route
''' </summary>
''' <remarks></remarks>
Public Const DefaultIgnoredExtensions As String = ".jpg,.gif,.png"
''' <summary>
''' For the catch-all route, checks the AppSettings: CatchallIgnoredExtensions to determine if the route should be ignored.
''' Generally this is for images - if we got to here that means the image was not found, and there's no need to follow this route
''' </summary>
Public Function Match(ByVal httpContext As System.Web.HttpContextBase, ByVal route As System.Web.Routing.Route, ByVal parameterName As String, ByVal values As System.Web.Routing.RouteValueDictionary, ByVal routeDirection As System.Web.Routing.RouteDirection) As Boolean Implements System.Web.Routing.IRouteConstraint.Match
If routeDirection = Routing.RouteDirection.IncomingRequest Then
Dim friendlyUrl As String = Nothing
If values.TryGetValue("friendlyUrl", friendlyUrl) AndAlso Not String.IsNullOrEmpty(friendlyUrl) Then
If friendlyUrl.Contains(".") Then
Dim catchallIgnoredExtensions As String = ConfigurationManager.AppSettings("CatchallIgnoredExtensions")
' only set defaults if the setting is not found - user may not want to ignore any extensions
If catchallIgnoredExtensions Is Nothing Then
catchallIgnoredExtensions = DefaultIgnoredExtensions
End If
' replace spaces and period to standardize, surround the extensions in commas for searching
catchallIgnoredExtensions = "," & catchallIgnoredExtensions.Replace(" ", "").Replace(".", "").ToLowerInvariant() & ","
Dim extension As String = System.IO.Path.GetExtension(friendlyUrl).Replace(".", "")
If catchallIgnoredExtensions.Contains("," & extension & ",") Then
Return False
End If
End If
End If
End If
Return True
End Function
结束类