【问题标题】:Removing /Index from end of browser URL从浏览器 URL 的末尾删除 /Index
【发布时间】:2014-01-29 12:01:22
【问题描述】:

我的 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");
    }

但现在似乎控制器被横切关注点污染了。有没有更清洁的方法?

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 2019-06-14
        • 2023-01-18
        • 2016-04-13
        • 2019-11-18
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        相关资源
        最近更新 更多