Richard Deeming
Проблема заключается в относительных URL-адресах. Браузер думает, что он смотрит на /employment
, но страница думает, что она смотрит на /WebSites/Employement/Employement.aspx
, поэтому он генерирует URL-адреса относительно этого пути. Поскольку они находятся на разных глубинах, относительные URL-адреса, созданные на сервере, не будут работать на клиенте.
Обычно вам нужно переписать URL-адрес обратно в оригинал до того, как страница будет отрисована. Что-то вроде этого должно сработать:
private static readonly object OriginalUrlKey = new object();
void Application_BeginRequest(Object sender, EventArgs e)
{
string originalUrl = Context.Request.RawUrl;
if (originalUrl.IndexOf("/employment", StringComparison.OrdinalIgnoreCase) != -1)
{
context.Items[OriginalUrlKey] = originalUrl;
string newPath = "~/WebSites/Employment/Employment.aspx";
Context.RewritePath(newPath, false);
}
}
void Application_PostMapRequestHandler(object sender, EventArgs e)
{
var originalUrl = Context.Items[OriginalUrlKey] as string;
if (originalUrl == null) return;
var page = Context.Handler as Page;
if (page != null)
{
page.PreRenderComplete += Page_PreRenderComplete;
}
else
{
RestoreUrl(originalUrl);
}
}
void Page_PreRenderComplete(object sender, EventArgs e)
{
var originalUrl = Context.Items[OriginalUrlKey] as string;
if (originalUrl != null) RestoreUrl(originalUrl);
}
void RestoreUrl(string originalUrl)
{
int index = originalUrl.IndexOf('?');
if (index != -1) originalUrl = originalUrl.Remove(index);
Context.RewritePath(originalUrl, false);
Context.Items.Remove(OriginalUrlKey);
}
Лучшим вариантом было бы использовать встроенные параметры маршрутизации:
Маршрутизация URL-адресов | Microsoft Docs[
^]
maysam_p82
большое вам спасибо, но я так и не понял, что же делает ваш метод?:(
и если бы я собирался, что метод ловит, когда я пишу "/занятость" каждый раз, когда на url-адресе, то что я должен делать?
Я хочу, чтобы эта работа, когда пользователь вводит www.website.com/employment
Richard Deeming
Мой метод изменяет URL-адрес обратно на исходный URL-адрес непосредственно перед отображением страницы. Этот должен исправьте относительные URL-адреса в выходных данных.
Но, как я уже сказал, Было бы лучше использовать маршрутизацию URL, которая гораздо более надежна.