ASP.NET Как предотвратить прямой доступ к базовой веб-форме в приложении маршрутизации?

Представьте себе приложение Web Forms с маршрутизацией. Чистое имя страницы, например:

http://www.mywebsite.com/home

Может иметь в основе URL:

http://www.mywebsite.com/page.aspx?id=3

Если пользователь вводит http://www.mywebsiter.com/page.aspx?id=3 в браузер, мне нужно перенаправить на http://www.mywebsite.com/home

Возможно ли это сделать? Я не могу найти способ сделать это, так как механизм маршрутизации не выполняется для физической страницы, и в методе page.aspx Page_Load у меня нет возможности узнать, был ли URL введен напрямую или был результатом маршрута.

2 ответа

Решение

Вы можете использовать Page.RouteData.Values коллекция, чтобы определить, загружается ли страница из-за маршрутизации, а не по прямому URL. Это можно сделать в Page_Load().

Если существуют значения данных маршрута (вы, вероятно, проверите значения, которые, как вы знаете, должны существовать), тогда они в порядке. Если значения данных маршрута отсутствуют, страница загрузилась "напрямую", и вам следует перенаправить их.

Проверьте модуль перезаписи URL IIS.

Вы также можете посмотреть на такие вещи, как отключение маршрутизации для файлов (RouteTable.Routes.RouteExistingFiles = false;) - это может быть опасно, хотя!

Другие вопросы по тегам