从浏览器URL的末尾删除/索引

时间:2014-01-29 12:01:23

标签: c# asp.net-mvc routing asp.net-mvc-routing

我的MVC路由有点生疏。

我正在使用

的默认路线
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");
    }

但现在似乎控制器受到跨领域问题的污染。有更清洁的方式吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

所以,如果我在默认路由上添加另一条路径,将此特定网址转储到不存在的控制器/动作上,那么我会得到一个可爱的404.完美。

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

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