В настоящее время я использую MVC Routing и MvcSiteMapProvider
. Я просто заметил, что-то, я не уверен насчет:MVC Маршрутизация фиктивных URL-адресов разрешена
[Route("mypath/{param1}/{param2}/{param3:int}/", Name = "myaction")]
[MvcSiteMapNode(Title = "My Thing", ParentKey = "myparent", Key = "myaction", PreservedRouteParameters = "param1, param2, param3")]
public ActionResult myaction(string param1, string param2, int param3)
{
mymodel model = gd.getmydata(param3);
var node = SiteMaps.Current.CurrentNode;
node.Title = model.name;
node.ParentNode.Title = location;
node.ParentNode.RouteValues["param"] = location;
return View(model);
}
Когда я проверить URL-адрес, как я проектировал это:
http://localhost:12345/mypath/param1/param2/param3
Однако если я bastardise по URL с бессмыслицы в Param2 или Param3 мнение по-прежнему разрешается без ошибок. Только путем изменения mypath или param3 делает это 404:
http://localhost:12345/mypath/drivel/param2/param3
http://localhost:12345/mypath/param1/drivel/param3
Я что-то упустил? Должен ли я иметь проверку параметров в контроллере?
Здравствуйте. То, что я пытаюсь достичь, - это URL-адрес, чтобы указать местоположение («essex») в param1, описание продукта в param2 («показать») и идентификатор базы данных в param3 (1234). URL должен быть mypath/essex/show/1234. Эти значения всегда будут меняться, поэтому литерал не будет работать. Могу ли я ограничить использование списка- . Содержит? –
Scott
Есть несколько вариантов. Можно было бы сделать [Ограничение маршрута RegEx] (http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-a-route-constraint-cs) или [ пользовательское ограничение маршрута] (http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-a-custom-route-constraint-cs) для каждого сегмента. Или вы могли бы поставить логику прямо в свой контроллер (или службу, которая была введена в нее), чтобы ограничить его и вернуть 404 не найден, если значения не соответствуют существующей возможности. Вы также можете сделать то и другое. – NightOwl888
Спасибо. Я начну с контроллера. – Scott