Можно создать собственное, авторизовывают атрибут как это:
public class ClubAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}
я использовал это для перенаправления в определенный клуб в сайте членства в клубе, который я создаю. Вы могли адаптировать это к своей потребности. BTW, в моем случае, который я действительно перенаправляю к странице входа в систему, но я проверяю, чтобы видеть, авторизовывается ли пользователь и если так, отображают сообщение, что у них нет корректных полномочий. Несомненно Вы могли также добавить что-то к ViewData или TempData для отображения на странице, но я не попробовал это
РЕДАКТИРОВАНИЕ AuthorizationContext. Отмена больше не существует в RC. "filterContext. Результатом является HttpUnauthorizedResult", кажется, достаточно: , Что произошло с filterContext. Отмена (ASP.NET MVC)
Вы можете использовать что-то вроде этого:
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
Но такой запрос может привести к состоянию гонки. Убедитесь, что вы участвуете в транзакции и заблокируете таблицу пользователей перед ее запуском. В противном случае вы можете получить два боба с одинаковым номером.
Вы можете использовать IFNULL :
INSERT INTO users(user_id, name)
SELECT(IFNULL((SELECT MAX(user_id)+1 from users where name='Bob'), 1), 'Bob';
Тогда не используйте MAX () + 1. Используйте схему автоматической нумерации в таблице.
Я неправильно прочитал вопрос. Используйте предложение Грега для IFNULL ().
Об этом сообщалось как об ошибке в MySQL .
Я цитирую Гильема Бишо:
Во-вторых, вот простейший обходной путь:
вместо использования:
вставить в значения foo (lfd) ((выбрать max (lfd) from foo) +1)
просто сделай
insert into foo (lfd) select (max (lfd) +1) from foo;