Да, можно получить URL, который вызывает ошибку 404, вам просто нужно, чтобы убедиться, что вы правильно настроить IIS.
Существует два случая, с которыми вам нужно обращаться, одна из которых - ошибка, возникающая из-за ошибки .aspx или другой страницы, обрабатываемой .NET, а другая - там, где ошибка исходит из плохой папки (как в вашем вопросе , http://example.com/testurl
) или имя файла (например, * .htm), который не обрабатывается .NET. В IIS 7 вам необходимо настроить пользовательскую ошибку 404 в разделе «Страницы ошибок .NET» в разделе «ASP.NET» для вашего веб-приложения, а также в разделе «Страницы ошибок» в разделе «IIS». Изменения web.config в конечном итоге выглядят примерно так:
<system.web>
<!-- other system.web stuff -->
<customErrors defaultRedirect="/Error404.aspx" mode="On" redirectMode="ResponseRewrite">
<error redirect="/Error404.aspx" statusCode="404" />
</customErrors>
</system.web>
<system.webServer>
<!-- other system.webServer stuff -->
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Error404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Примечание: redirectMode = «ResponseRewrite», перечисленное выше, важно, если вы хотите, чтобы ваши страницы 404 на самом деле вернуть 404 сообщений, и я не думаю, что это может устанавливается через IIS.
В моем примере я создал страницу с именем Error404.aspx для обработки всех ошибок 404. Когда .NET-страница (.aspx и т. Д.) Генерирует исключение 404, исходное имя файла можно найти в переменной aspxerrorpath querystring. Когда обычная htm или другая страница вызывает ошибку 404, исходный путь можно прочитать из свойства Request.RawUrl. Я использовал следующий код в моей странице Error404.aspx обращаться либо случай:
public partial class Error404 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OriginalUrl = Request.QueryString["aspxerrorpath"] ?? Request.RawUrl;
Server.ClearError();
Response.Status = "404 not found";
Response.StatusCode = 404;
}
public string OriginalUrl { get; private set; }
}
По умолчанию страница 404 ошибки не возвращает код статуса 404, поэтому вам нужно установить его вручную. См. this post для более подробной информации.
Удалась ли ваша проблема? Я был бы рад прояснить мой ответ, если это необходимо. – rsbarro