Сейчас я пытаюсь работать с System.Web.Routing. Все просто отлично, но я не могу понять, как заставить аутентификацию формы работать с маршрутизацией URL (возврат URL, перенаправление и т. Д.). Гугл ничего не говорит. Помогите! :)
UPD: Я забыл - я не использую MVC . Это проблема. Как использовать rounig и аутентификацию формы без MVC
UPD2: подробнее о моей проблеме
Что я хочу получить: URL-адреса типа «mysite.com/content/123
», «mysite.com/login/
» и т. Д. С использованием маршрутов. Важно, чтобы страница входа работала как «обычная» форма входа ASP.NET (перенаправляет на вход из защищенной области, когда вход не выполнен, и перенаправляет обратно в защищенную область при входе в систему).
Это то, что я делаю.
В global.asax
на Application_Start
зарегистрируйте маршруты следующим образом:
routes.Add("LoginPageRoute", new Route("login/", new CustomRouteHandler("~/login.aspx")));
routes.Add("ContentRoute", new Route("content/{id}", new ContentRoute("~/content.aspx"))
{
Constraints = new RouteValueDictionary {{ "id", @"\d+" }}
});
Где CustomRouteHandler
и ContentRoute
- простые IRouteHandler
классы, например:
...
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}
...
Все кажется идеальным: я получаю content.aspx
, когда перехожу к “/content/10”
и login.aspx
, когда перехожу к “/login/”
. Но ...
Когда я защищаю контент (в web.config
, с deny=”?”
), форма входа не работает должным образом.
Теперь я не могу перейти на страницу “/content/10”
:
0. Я набираю “/content/10”
в своем браузере.
1. Сайт перенаправляется на “/login/?ReturnUrl=%2fcontent%2f10”
. (Хм ... кажется, что все проблемы начинаются здесь, верно? :)
2. Я пытаюсь войти в систему. Независимо от того, какие учетные данные я ввел ...
3. … сайт перенаправляет меня на “login?ReturnUrl=%2fContent%2f10”
(желтый экран ошибки - Access is denied.
Описание: An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL
.)
Итак, проблема заключается в том, как заставить ASP.NET понимать реальный ReturnUrl
и обеспечивать перенаправление после входа в систему.