【问题标题】:ASP.NET MVC5 Customised Inbound RoutingASP.NET MVC5 自定义入站路由
【发布时间】:2015-04-25 01:50:35
【问题描述】:

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

当我通过我的自定义路由来检查一个以 *.+ 结尾的 URL 时,我提交请求时不会触发我的类。

一个示例 URL 是“~/old/windows.html”

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

再次,如果我将 url ro 检查更改为“~/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;
        }
    }

在 RoutesConfig 文件中,我已经像这样注册了我的路线:-

 routes.MapMvcAttributeRoutes();

routes.Add(new LegacyRoute(new[]{"~/articles/windows.html","~/old/.Net_1.0_Class_Library"}));  

谁能指出为什么会出现问题?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-5 url-routing asp.net-mvc-routing


    【解决方案1】:

    默认情况下,.html 扩展名不由 .NET 处理,而是由 IIS 直接处理。您可以通过在<system.webServer> 下的 Web.config 中添加以下部分来覆盖 -

    <handlers>
      <add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    

    正如here 指出的那样。以上内容会将每个.html 文件请求路由到.NET,如果您不希望路由处理每个.html 文件,您可能希望通过提供更完整的路径来更具体。

    【讨论】:

      【解决方案2】:

      我找到了问题所在,我相信这会帮助很多开发人员。

      问题在于通过 Visual Studio 运行的 IIS Express。

      在 applicationhost.config 中配置了一个名为 :-

      的模块

      UrlRoutingModule-4.0

      这是它在文件中的样子:-

      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
      

      您需要将preCondition参数设置为“”。

      要做到这一点:-

      • 通过 Visual Studio 运行您的应用程序
      • 右键单击系统托盘中的 IIS Express,选择“显示所有应用程序”
      • 单击您要编辑的项目,然后单击配置 URL。
      • 用 Visual Studio 打开文件,找到模块并修改。

      希望这对遇到类似问题的其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 2020-04-15
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多