ASP.NET Как предотвратить прямой доступ к базовой веб-форме в приложении маршрутизации?
Представьте себе приложение Web Forms с маршрутизацией. Чистое имя страницы, например:
Может иметь в основе 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;
) - это может быть опасно, хотя!