2014-01-29 55 views
0

我在我的MVC路由有點生疏。刪除/索引從瀏覽器URL末尾

我使用的

routes.MapRoute(
    "Default", 
    "{controller}/{action}", 
    new 
    { 
     controller = "Default", 
     action = "Index", 
    }); 

默認路由我有一個控制器:

public class SomeController : Controller 
{ 
    public async Task<ActionResult> Index() 

所以,通常情況下,這可以用打要麼http://mydomain/Some/Index - 或 - http://mydomain/Some

在這個特定的控制器上,我想要麼拒絕(404)〜/ Some/Index,要麼只是將〜/ Some/Index重定向到〜/ Some。

這是相對容易的控制器來完成:

public async Task<ActionResult> Index() 
{ 
    var p = Request.Url.Segments; 
    var last = p.Last(); 
    if(string.Equals(last, "index", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     return RedirectToActionPermanent("Index"); 
    } 

但現在看來,像控制器過得去橫切關注點污染。有更清潔的方法嗎?

回答

0

所以,如果我添加默認路由上面的另一條路線將這個特定的URL轉儲到一個不存在的控制器/動作上,然後我得到一個可愛的404。

routes.MapRoute(
    "SomeIndexDeny", 
    "Some/Index", 
    new 
    { 
     controller = "NonExistentController", 
     action = "NonExistentMethod" 
    }); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}", 
    new 
    { 
     controller = "Default", 
     action = "Index", 
    });