Возврат запрошенного URL-адреса на пользовательской странице ошибок в ASP.net

Работает в ASP.net 3.5 и MVC 1.0.

Что я хотел бы сделать, так это вернуть запрошенный URL-адрес, который генерирует ошибку 404, на пользовательской странице ошибки. Примерно так же, как это делает Google на своих страницах ошибок (http://www.google.com/test).

eg.

Сожалеем, но запрошенный адрес "http://www.domain.com/nonexistantpage.aspx" не существует на этом сервере.

Каков наилучший способ выполнить такой мягкий 404?

Кроме того, в качестве примечания: кто-нибудь знаком с возвратом пользовательской страницы ошибки вместо уродливой ерунды ...notfound?aspxerrorpath=/awdawd, сохраняя запрошенный URL-адрес в адресной строке браузера? ...Подозреваю, что-то связанное с server.transfer?


person Chris    schedule 25.11.2009    source источник


Ответы (1)


Ознакомьтесь с этими ресурсами, связанными с этой темой:

Подводя итог, вы можете выполнить реализацию, подобную Google, с сохранением запрошенного URL-адреса, определив универсальный маршрут, который выполняет определенное действие контроллера.

//defined below all other routes
routes.MapRoute(
    "Catch All",
    "{*path}", 
    new { controller = "Error", action = "NotFound" }
);

public ActionResult NotFound(string path)
{
    Response.StatusCode = (int)HttpStatusCode.NotFound;
    ViewData["path"] = path; //or Request.Url.ToString() if you want full url
    return View();
}

Однако это не полное решение. Предполагая, что вы оставили сопоставление маршрутов по умолчанию, все, что соответствует {Controller}/{action}/{id}, по-прежнему будет вызывать традиционную ошибку 404 или пользовательскую ошибку. Вам придется явно определить все возможные маршруты, если вы действительно хотите, чтобы универсальный маршрут собирал все, что не соответствует определенному контроллеру/действию или типу параметра - не обязательно тривиальная задача.

person Kurt Schindler    schedule 25.11.2009