2014-01-29 52 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", 
    });