0

我正在使用自定義入站URL路由「玩」,並遇到了問題。ASP.NET MVC5定製入站路由

當我將自定義路由傳遞給一個要檢查的URL時,以*。+結尾,當我提交請求時,我的類不會被觸發。

一個例子URL是「〜/老/ windows.html」

當我通過這個在調試步驟,我RouteBase執行不火。如果我編輯我傳遞給我的路由的構造函數的url以嘗試匹配「〜/ old/windows」,我的實現將按預期啓動。

再說一遍,如果我將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; 
     } 
    } 

在我已經註冊了,像這樣我的路線RoutesConfig文件: -

routes.MapMvcAttributeRoutes(); 

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

任何人都可以指出爲什麼有問題?

回答

1

默認情況下,.html擴展名不由.NET處理,它由IIS直接處理。

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

正如指出的here - 您可以通過<system.webServer>下加入Web.config中的以下部分覆蓋。上述操作會將每個.html文件請求路由到.NET,如果您不希望路由處理每個.html文件,則可以通過提供更完整的路徑來更具體地指定。

1

我發現了這個問題,我相信這會幫助很多開發人員。

問題在於通過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打開文件,找到模塊並修改。

希望這可以幫助任何遇到類似問題的人。