当在url末尾添加三个点时,我的MVC站点的路由出现问题,显示的是标准的ASP.Net 404错误,但我希望它能路由到我们的自定义错误页面。
"/"应用程序中的服务器错误。
找不到资源。
描述:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保拼写正确。
请求的URL:/ABC/床垫/…/
据我所知,它甚至没有进入MVC。我认为服务器认为这是一个问题,它正在以我们不希望的方式处理它。我不知道如何解决这个问题,这样我就可以将这个url路由到我们的自定义错误页面。
我尝试过的东西:
routes.MapRoute("MyRoute", "abc/{Keyword}", new { controller = "KeywordSearch", action = "Index", Keyword = UrlParameter.Optional});
routes.MapRoute("MyRouteCatchAll", "abc/{Keyword}/{*CatchAll}", new { controller = "Base", action = "NotFound", Keyword = UrlParameter.Optional, CatchAll = UrlParameter.Optional });
routes.MapRoute("CatchAll", "{*catchAll}", new { controller = "KeywordSearch", action = "NotFound" });
我也尝试过使用URL重写。也许正则表达式是错误的。
<rule name="trailingdots" enabled="true" stopProcessing="true">
<match url="abc/([_0-9a-z-]+)/^([^.]+)$" />
<action type="Redirect" url="sr/{R:1}/" />
</rule>
我无计可施。我在任何地方都找不到任何信息来处理这种情况。
任何帮助都将不胜感激。
更新:我能够得到一个URL重写规则(s)工作
<rule name="RemoveDotsAndSlash" stopProcessing="true">
<match url="(.*)/.../$" />
<action type="Rewrite" redirectType="Permanent" url="{R:1}" />
</rule>
<rule name="RemoveDots" stopProcessing="true">
<match url="(.*)/...$" />
<action type="Rewrite" redirectType="Permanent" url="{R:1}" />
</rule>
但我想让这样的东西发挥作用,但它仍然需要我进入通用的404页面:
<rule name="RemoveTrailingDotsAndSlash" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_URI}" pattern="^(.*)/.../$" />
<add input="{REQUEST_URI}" pattern="^(.*)/...$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>
关于我离得到我想要的东西有多近,有什么想法吗?
感谢
您不需要用模式删除它。如果将以下标记添加到web.config,则可以使用自定义错误重定向到默认错误页面:
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<customErrors mode="On" defaultRedirect="error.aspx">
<error statusCode="404" redirect="notFound.aspx" />
</customErrors>
[ ...]
</system.web>
在文档中,解释是设置relatedUrlToFileSystemMapping=true相当于允许URL中的无效Windows路径,然后它重定向到404错误,我们可以捕捉到它。