Я прочитал об осуществлении папки особенности здесь: https://msdn.microsoft.com/en-us/magazine/mt763233.aspxСпособ по имени действий в иерархии папок вложенной особенности
Мне очень нравится идея отделить от особенностей вместо типов файлов. Я работаю над расширенным решением, которое позволяет создавать иерархию функций на неограниченных уровнях.
Для этого я создал очень простую логическую организацию для организации папок/файлов. Например:
[Feature]
[Auth]
[Entity]
User.cs
Role.cs
[Route]
[Login]
[Forgot]
Forgot.cs
Forgot.cshtml
ForgotModel.cs
Login.cs
Login.cshtml
LoginModel.cs
Index.cs
Index.cshtml
Auth.cs
Как вы можете видеть все, что находится под верхней областью функций. Внутри этой папки есть специальные папки с функциями (Auth). Под ним есть подпапка Route, которая содержит иерархию всех контроллеров/представлений.
Для примера выше я уже осваивал пользовательскую логику маршрутизации, которая обеспечивает мне эти маршруты:
/Auth
/Auth/Login
/Auth/Login/Forgot
Это работает, но я не знаю, если я сделал это хорошо или укомплектовать неправильно. Для достижения пользовательской маршрутизации я просто сделал это:
public void Apply(ControllerModel controller)
{
//From the article I linked before:
controller.Properties.Add("feature",
GetFeatureName(controller.ControllerType));
//My custom route value implementation:
controller.Selectors.Clear();
var routePath = GetRoutePath(controller.ControllerType); //"auth/login/forgot"
var routeAttr = new RouteAttribute(routePath);
var selector = new SelectorModel
{
AttributeRouteModel = new AttributeRouteModel(routeAttr)
};
controller.Selectors.Add(selector);
}
- ли controller.Selectors хорошее место, чтобы применить пользовательский путь по маршруту?
- Действительно ли это необходимо. Очистить() перед добавлением нового?
Я не нашёл ни одной статьи о контроллере.
Я также хотел бы реализовать поддержку имени действия для преобразования http-метода, где все стандартные имена HTTP-глаголов (get, post, put, patch, delete) автоматически привязываются к соответствующему фильтру http-метода. Например:
public class Login : Controller
{
public IAcionResult Get()
{
return View();
}
public IAcionResult Post(LoginModel model)
{
return Ok()
}
}
Я не хочу использовать [HttpGet] и [HttpPost] атрибуты везде у меня есть только получить/разместить действия. Я думаю, что для этого есть официальное решение, но я не мог его найти.