ASP.NET MVC5自定义入站路由

时间:2015-02-23 16:49:04

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

我"玩"使用自定义入站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"}));  

有人能指出为什么会出现问题吗?

2 个答案:

答案 0 :(得分: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文件,您可能希望通过提供更完整的路径来更具体。

答案 1 :(得分:1)

我发现了问题,我相信这会帮助很多开发人员。

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

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

的模块

<强> UrlRoutingModule-4.0

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

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

您需要将前提条件参数设置为&#34;&#34;。

要做到这一点: -

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

希望这可以帮助遇到类似问题的其他人。