ASP.NET MVC5 Customised Inbound Routing
我正在"玩"自定义入站 URL 路由,但遇到了问题。
当我将自定义路由传递给要检查的 URL 时,该 URL 以 *. ,当我提交请求时,我的课程没有被解雇。
示例 URL 为"~/old/windows.html"
当我在调试器中逐步执行此操作时,我的 RouteBase 实现不会触发。如果我编辑传递给路由构造函数的 url 以尝试匹配"~/old/windows",我的实现将按预期触发。
再次,如果我将 url ro 检查更改为"~/old/windows"。问题再次出现。
我的路线实现如下:-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class LegacyRoute : RouteBase { private string[] _urls; public LegacyRoute(string[] targetUrls) { _urls = targetUrls; } public override RouteData GetRouteData(HttpContextBase httpContext) { RouteData result = null; string requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath; if (_urls.Contains(requestedURL, StringComparer.OrdinalIgnoreCase)) { result = new RouteData(this, new MvcRouteHandler()); result.Values.Add("controller","Legacy"); result.Values.Add("action","GetLegacyURL"); result.Values.Add("legacyURL", requestedURL); } return result; } public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { return null; } } |
在 RoutesConfig 文件中,我已经像这样注册了我的路线:-
1 2 3 | routes.MapMvcAttributeRoutes(); routes.Add(new LegacyRoute(new[]{"~/articles/windows.html","~/old/.Net_1.0_Class_Library"})); |
谁能指出为什么会出现问题?
我已经找到了问题所在,我相信这会帮助很多开发人员。
问题在于通过 Visual Studio 运行的 IIS Express。
在 applicationhost.config 中配置了一个名为 :-
的模块
UrlRoutingModule-4.0
这是它在文件中的样子:-
1 |
您需要将 preCondition 参数设置为 ".
要做到这一点:-
- 通过 Visual Studio 运行您的应用程序
- 右键单击系统托盘中的 IIS Express,选择"显示所有应用程序"
- 单击您要编辑的项目,然后单击配置 URL。
- 使用 Visual Studio 打开文件,找到模块并修改。
希望这对遇到类似问题的其他人有所帮助。
默认情况下,
下的 Web.config 中添加以下部分来覆盖
1 2 3 | <handlers> </handlers> |
正如这里指出的那样。以上将每个