Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC5自定义入站路由_Asp.net_Asp.net Mvc_Asp.net Mvc 5_Url Routing_Asp.net Mvc Routing - Fatal编程技术网

ASP.NET MVC5自定义入站路由

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

我正在“玩”自定义入站URL路由,遇到了一个问题

当我向自定义路由传递一个URL以*+结尾进行检查时,我的类在提交请求时不会被激发

示例URL为“~/old/windows.html”

当我在调试器中逐步执行此操作时,我的RouteBase实现不会启动。如果我编辑传递给路由构造函数以尝试与“~/old/windows”匹配的url,我的实现将按预期启动

同样,如果我将url更改为“~/old/windows”,问题会再次出现

我的路线实施如下:-

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打开文件,找到模块并结束
希望这能帮助其他遇到类似问题的人