Управление RouteValueDictionary в RouteConstraint
Допустим, у меня есть маршрут; www.kunduz.com/stuff/something
где "что-то" проверяется на соответствие ограничениям маршрута;
public class AnalysisTypePathRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
//check if "something" is really something
}
}
и скажем, что материал имеет такую структуру
public class Stuff
{
public int Id{get;set;}
public string name {get;set;}
//some other properties
}
Учтите, что объект Stuff - это не просто запись в БД, а скорее тип. Мол, если бы это был сайт электронной коммерции, это могли быть "автомобили" или "мебель".
Поэтому я проверяю, является ли "что-то" действительно допустимым "материалом" в моем ограничении маршрута. Тогда в моем контроллере;
Public class SomeController
{
public GetStuff(string stuffName)
{
//get stuff by its name and get its Id
//use that Id to do something else
}
}
Теперь, что я могу сделать, это
public class AnalysisTypePathRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
//check if "something" is really something
values.Add("stuffId",stuff.Id");
}
}
и получить этот идентификатор, который я добавил в качестве параметра в моем действии контроллера
public GetStuff(int stuffId)
{
//get stuff by its name and get its Id
//use that Id to do something else
}
Это, по-видимому, увеличит производительность, и для меня более логично, что я должен избегать получения идентификаторов вещей дважды.
В чем мой вопрос, это хорошая практика? Поскольку мой URL-адрес не содержит sutffId, действие моего контроллера может сбить с толку будущих разработчиков, изучающих этот код.
Я был бы очень признателен за понимание этого вопроса.
Спасибо.