Возвращать 404 вместо 401 - плохая практика (как упомянуто в комментариях @Chris Pratt), и ее следует избегать. Рассмотрим эти случаи,
- Вы оставляете проект кому-то другому, и они не могут понять, почему возвращается 404
- 404 возвращается, когда вы вызываете домашнюю страницу / страницу указателя. Плохая идеология.
- Позже в проекте вы разрешаете публиковать запросы без аутентификации. И так далее, и тому подобное.
В любом случае, как часть сообщества, я дам вам ответ ...
Добавьте это в ваш global.asax
void Application_EndRequest(object source, System.EventArgs args)
{
if (Response.StatusCode == 401)
{
Response.ClearContent();
Response.RedirectToRoute("ErrorH", (RouteTable.Routes["ErrorH"] as Route).Defaults);
}
}
И в routeConfig создайте маршрут для вашей ошибкиHandler:
routes.MapRoute(
"ErrorH",
"Error/{action}/{errMsg}",
new { controller = "CustomController", action = "Change401To404", errMsg = UrlParameter.Optional }
);
А в вашем кастомном контроллере:
public class CustomController : Controller //or Base
{
public ActionResult Change401To404(){
//Do whatever you want
}
}
PS: Это не единственный способ, есть много других способов сделать это. Но по крайней мере в этом методе вы можете отличить реальные 404 ответа от 401 ответа.