Я обнаружил, что у меня много повторяющихся кодов во всех моих действиях и хочу знать, как лучше всего это избежать. Скажем, например, что каждый зарегистрированный пользователь принадлежит школе, и мне нужно получить доступ к этому учебнику почти в каждом действии.MVC 5 глобальная переменная на пользователя
Они, как он у меня теперь почти каждое действие будет иметь повторное попадание базы данных и нужно ссылаться на мой UserService класс ... что-то вроде:
public ActionResult Index()
{
var schoolId = userService.GetSchoolId(User.Identity.GetUserId());
var textBooksForSchool = textBookService.GetBooks(schoolId);
...
}
public ActionResult Delete()
{
var schoolId = userService.GetSchoolId(User.Identity.GetUserId());//all over the place
var textBooksForSchool = textBookService.DeleteBooks(schoolId);
...
}
Я знаю, что я могу добавить SchoolId к претензиям но синтаксис для возвращения его в каждый метод является довольно громоздким (насколько я понимаю, это позволяет избежать дб удар каждый раз, когда претензия доступ?):
в GenerateIdentityAsync:
var claims = new Collection<Claim>
{
new Claim("SchoolId", User.SchoolId.ToString())
};
userIdentity.AddClaims(claims);
в действии:
var SchoolId = Convert.ToInt32((User as ClaimsPrincipal).Claims.First(x => x.Type == "SchoolId").Value);
Есть ли какой-то лучшей практики здесь? Возможно сохранение заявки в глобальной переменной при входе в систему?
Вы можете переместить многословный код метода расширения. – SLaks