ASP.NET MVC5自定义入站路由
我正在“玩”自定义入站URL路由,遇到了一个问题 当我向自定义路由传递一个URL以*+结尾进行检查时,我的类在提交请求时不会被激发 示例URL为“~/old/windows.html” 当我在调试器中逐步执行此操作时,我的RouteBase实现不会启动。如果我编辑传递给路由构造函数以尝试与“~/old/windows”匹配的url,我的实现将按预期启动 同样,如果我将url更改为“~/old/windows”,问题会再次出现 我的路线实施如下:-ASP.NET MVC5自定义入站路由,asp.net,asp.net-mvc,asp.net-mvc-5,url-routing,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Url Routing,Asp.net Mvc Routing,我正在“玩”自定义入站URL路由,遇到了一个问题 当我向自定义路由传递一个URL以*+结尾进行检查时,我的类在提交请求时不会被激发 示例URL为“~/old/windows.html” 当我在调试器中逐步执行此操作时,我的RouteBase实现不会启动。如果我编辑传递给路由构造函数以尝试与“~/old/windows”匹配的url,我的实现将按预期启动 同样,如果我将url更改为“~/old/windows”,问题会再次出现 我的路线实施如下:- public class LegacyRoute
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;
}
}
在RouteConfig文件中,我已按如下方式注册了我的路线:-
routes.MapMvcAttributeRoutes();
routes.Add(new LegacyRoute(new[]{"~/articles/windows.html","~/old/.Net_1.0_Class_Library"}));
有人能指出问题的原因吗?默认情况下,
.html
扩展不是由.NET处理的,而是由IIS直接处理的。您可以通过在Web.config的
-
<handlers>
<add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
. 以上内容将把每个.html
文件请求路由到.NET,如果您不希望路由处理每个.html
文件,您可能希望提供更完整的路径,从而更加具体。我发现了问题,我相信这将帮助许多其他开发人员
问题在于通过Visual Studio运行的IIS Express
applicationhost.config中配置了一个名为:-
UrlRoutingModule-4.0
这是它在文件中的外观:-
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
您需要将前提条件参数设置为“”
为此:-
- 通过Visual Studio运行您的应用程序
- 右键单击系统托盘中的IIS Express,选择“显示所有应用程序”
- 单击要编辑的项目,然后单击配置URL
- 使用Visual Studio打开文件,找到模块并结束
希望这能帮助其他遇到类似问题的人