2014-07-10 56 views
15

我正在創建一個ASP.NET MVC 5應用程序,並且我有一些路由問題。我們正在使用屬性Route來映射我們在Web應用程序中的路線。我有以下作用:在ASP.NET MVC 5中路由可選參數

[Route("{type}/{library}/{version}/{file?}/{renew?}")] 
public ActionResult Index(EFileType type, 
          string library, 
          string version, 
          string file = null, 
          ECacheType renew = ECacheType.cache) 
{ 
// code... 
} 

如果我們通過斜線字符/url末,這樣我們只能訪問此網址:

type/lib/version/file/cache/ 

它工作正常,但沒有不工作/,我得到一個沒有找到404錯誤,這樣

type/lib/version/file/cache 

或本(沒有可選參數):

type/lib/version 

我想在url末有或無/焦炭訪問。我最後兩個參數是可選的。

RouteConfig.cs是這樣的:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapMvcAttributeRoutes(); 
    } 
} 

我怎樣才能解決呢?使斜槓/也是可選的?

+0

「不工作」,你的意思是你得到404找不到? – haim770

+0

是的! 404錯誤,如果我添加一個斷點,它只是不會在斷點上命中! –

+0

應用程序是否作爲虛擬目錄託管? – haim770

回答

21

也許你應該嘗試讓你的枚舉爲整數而不是?

這是我做的

public enum ECacheType 
{ 
    cache=1, none=2 
} 

public enum EFileType 
{ 
    t1=1, t2=2 
} 

public class TestController 
{ 
    [Route("{type}/{library}/{version}/{file?}/{renew?}")] 
    public ActionResult Index2(EFileType type, 
           string library, 
           string version, 
           string file = null, 
           ECacheType renew = ECacheType.cache) 
    { 
     return View("Index"); 
    } 
} 

我的路由文件

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // To enable route attribute in controllers 
    routes.MapMvcAttributeRoutes(); 

    routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
} 

然後我就可以撥打電話一樣

http://localhost:52392/2/lib1/ver1/file1/1 
http://localhost:52392/2/lib1/ver1/file1 
http://localhost:52392/2/lib1/ver1 

http://localhost:52392/2/lib1/ver1/file1/1/ 
http://localhost:52392/2/lib1/ver1/file1/ 
http://localhost:52392/2/lib1/ver1/ 

它工作正常...

-1
//its working with mvc5 
[Route("Projects/{Id}/{Title}")] 
public ActionResult Index(long Id, string Title) 
{ 
    return view(); 
}