Идентификатор в начале Маршрута в MVC - PullRequest
1 голос
/ 21 февраля 2011

У меня есть ситуация, когда мне требуется маршрут в моем приложении, чтобы метод индекса приложения мог распознавать это http://www.website.com/ID

, а также, http://www.website.com/Controller/Action также должно работать.

проблема в том, что когда я настраиваю маршрут, соответствующий первому URL, маршрут для второго URL не работает (даже если я для этого настрою отдельный маршрут).

Скажите, пожалуйста, что яздесь делаешь неправильно ...

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Имеет ли значение ID отличительную характеристику, которая позволила бы вам определить разницу между ним и именем контроллера? Например, числовой? Если это так, вы можете установить ограничение для первого маршрута, чтобы оно совпадало только с идентификаторами. Это позволит другим запросам переходить ко второму (по умолчанию) маршруту.

routes.MapRoute(
    "IdRoute",
    "{id}",
    new { controller = "home", action = "get" },
    new { id = "\d+" } // match ids that consist of 1 or more digits
);

routes.MapRoute(
    "Default",
    new { controller = "home", action = "index", id = UrlParameter.Optional }
);
0 голосов
/ 21 февраля 2011

Должно работать следующее:

routes.MapRoute(
    "DefaultWithID",
    "{id}",
    new { controller = "Home", action = "Index" }
);

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

Предполагая, что:

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        return View();
    }
}

Оба: /123 и /Home/Index/123 работают нормально.

...