【问题标题】:How do I mix short URLs and regular URLs in ASP.NET MVC?如何在 ASP.NET MVC 中混合使用短 URL 和常规 URL?
【发布时间】:2013-03-28 10:30:20
【问题描述】:

我有一个带有正常默认路由和几个控制器的站点。我想分发可以链接回主页/索引操作的“短 URL”链接。例如,我可以这样做

  • /MySite - 默认带您到主页/索引
  • /MySite/SomeController/SomeAction - 默认带你到指定的控制器/动作

但我也想做:

/MySite/SomeID - 使用提供的 id 参数将您带到 Home/Index。

我可以添加一个“shortUrl”路由并分发一个像“/MySite/ShortUrl/SomeID”这样的网址,但是还有其他方法可以使用上面那个“仅限id”的网址吗?

【问题讨论】:

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


    【解决方案1】:

    你在做这样的事情时遇到的问题是以下内容会模棱两可:

    /MySite/SomeID
    /MySite/SomeController
    

    您希望如何区分这两者?如果你不介意第二个是不可能的(即你很高兴在指定控制器时总是指定一个动作),你可以尝试这样的事情:

    routes.MapRoute(
        "ShortUrl",
        "{id}",
        new { controller = "Home", action = "Index", id = Url.OptionalParameter }
    );
    
    routes.MapRoute(
        "Default",                                              
        "{controller}/{action}/{id}",                           
        new { controller = "Home", action = "Index", id = Url.OptionalParameter }
    );
    

    然后请求/MySite/SomeID 应该会将您带到与MySite/Home/Index/SomeID 相同的操作。

    如果您需要能够指定 任一 和 ID 或控制器(使用默认操作),您可以执行以下操作(也使用上述路由):

    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            // If the ID represents something, show that something.
            if (IdMatchesSomeResource(id))
            {
                // Do something
                return View();
            }
            // Otherwise, treat it as a request for a controller.
            else
            {
                return RedirectToAction("Index", id);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2014-04-23
      • 2017-05-06
      • 2017-01-15
      • 2012-03-19
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多