2010-04-21 10 views
2

Я пытаюсь защитить весь мой сайт MVC, поэтому перед домашним контроллером я добавил атрибут [Авторизовать].ReturnUrl = Default.aspx для MVC?

Теперь, если вы запустите его из Visual Studio или перемещаетесь с использованием корневого URL-адреса (например, http://localhost:2897), он перенаправляет на страницу входа, как и ожидалось. Однако URL-адрес в адресной строке после перенаправления выглядит так: http://localhost:2897/Account/LogOn?ReturnUrl=%2fdefault.aspx%3f

Я не проверял это, поскольку я не реализовал свой код аутентификации. Однако, это выглядит большой проблемой для меня, так как у меня нет default.aspx в моем проекте!

Мой тег аутентификации в web.config выглядит следующим образом:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" defaultUrl="~/Home/Index" timeout="2880"/> 
</authentication> 

Почему не забрать этот маршрут как ReturnUrl по умолчанию вместо default.aspx?

ответ

2

ASP.NET (чтобы быть точным, FormsAuthentication.RedirectFromLoginPage) всегда игнорирует параметр defaultUrl в web.config, когда параметр ReturnUrl присутствует. Это выполняется только тогда, когда вы переходите непосредственно на страницу входа в систему без прохождения каких-либо параметров ReturnUrl.

Шаблон проекта ASP.NET MVC предоставляет пустой шаблон Default.aspx для обработки таких запросов, как в режиме конвейера IIS Classic. С тобой все в порядке.

+0

Хм .. думаю, я не задаю свой вопрос правильно. Я предполагаю, что мой реальный вопрос: как я могу заставить его установить ReturnUrl как Home/Index вместо default.aspx? То есть, когда человек переходит к корневому URL, а не к определенному маршруту. (Если человек перемещается по определенному маршруту, ReturnUrl верен.) – Cynthia

+0

@Cynthia: Я вижу вашу точку. На самом деле проблема заключается в том, что веб-сервер пытается использовать документ по умолчанию при запросе «/». Шаблон по умолчанию, поставляемый с ASP.NET MVC * прозрачно *, переписывает запросы на «default.aspx» на «/» маршрут * на сервере * и пытается выполнить действие, но поскольку он требует аутентификации, он перенаправляет пользователя на страницу входа, используя текущий URL-адрес в качестве URL-адреса возврата (который по-прежнему является 'default.aspx'). Фактически вы получаете то, что хотите (кроме получения 'default.aspx', отображаемого в адресной строке). У вас будет меньше проблем в интегрированном режиме. –

+0

ОК, я попробовал, и Default.aspx действительно переходит к контроллеру/действию по умолчанию. Так что .. неважно! Я думал, что это будет бомбить, но, видимо, нет. Благодаря! – Cynthia

Смежные вопросы