Я создаю веб-сайт с несколькими арендаторами, на котором размещаются страницы для клиентов. Первый сегмент URL будет строка, которая идентифицирует клиента, определенный в Global.asax с использованием следующей схемы URL-маршрутизации:Как перенаправить на динамический URL входа в ASP.NET MVC
"{client}/{controller}/{action}/{id}"
Это прекрасно работает с URL-адреса, такие как/Foo/Home/Index.
Однако при использовании атрибута [Авторизовать] я хочу перенаправить на страницу входа, которая также использует ту же схему сопоставления. Таким образом, если клиент является foo, страница входа в систему будет/foo/Account/Login вместо фиксированной пересылки/Account/Login, определенной в web.config.
MVC использует HttpUnauthorizedResult для возврата неавторизованного статуса 401, который, как я полагаю, вызывает перенаправление ASP.NET на страницу, определенную в web.config.
Так кто-нибудь знает, как переопределить поведение перенаправления входа в ASP.NET? Или было бы лучше перенаправить в MVC путем создания настраиваемого атрибута авторизации?
EDIT - Ответ: после некоторого копания в источник .Net, я решил, что атрибут пользовательской аутентификации является лучшим решением:
public class ClientAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}
делает почти ту же самую вещь с маршрутизацией, так что мне нужно это! Благодаря! – 2008-12-27 21:20:41
Спасибо, я пытался выяснить, как сделать что-то подобное. – Chance 2010-02-03 02:34:06
это дало мне идею для собственной реализации, спасибо большое! – 2010-10-31 16:47:08