Egyéni oldalra próbálok átirányítani, ha hiba történik. Így a Web.Config
-hez hozzáadtam a következő kódot
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Views/Error/Error500.cshtml">
<error statusCode="404" redirect="~/Views/Error/Error404"/>
<error statusCode="500" redirect="~/Views/Error/Error500"/>
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="~/Views/Error/Error404" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="~/Views/Error/Error500" responseMode="ExecuteURL" />
</httpErrors>
De amikor megpróbálom a localhost:23920/aFakeURl-t, átirányít egy üres oldalra, és nem éri el a ErrorController
-omat.
Ha megpróbálom a localhost:23920/Error/Error404, bemegy a vezérlőmbe
// GET: /Error/Error404
public ActionResult Error404()
{
Response.StatusCode = 404;
return View();
}
akkor egy statusCode
404-et ad vissza, és az IIS nem tud vele mit kezdeni, és üres oldalt ad. Tehát egészen biztos vagyok benne, hogy a probléma a Web.Config
-ban lévő elérési út.
megpróbáltam
~/Views/Error/Error404"
~/Views/Error/Error404.cshtml"
/Views/Error/Error404"
/Views/Error/Error404.cshtml"
Érdemes megemlíteni, hogy ha az elérési útnak nincs ~
értéke, akkor üres oldal helyett futásidejű kivételt ad vissza.
Szóval lenne 2 kérdésem.
- Mi a helyes módja a
Web.Config
írásának? - Vissza kell adnom a megfelelő állapotkódot, mint ez
Response.StatusCode = 404;
aErrorController
-ben?
Köszönöm
Nem tudom, jó-e megemlíteni, de én a Elmah
-et használom hibakezelésre és naplózásra. Fogalmam sincs, hogy van-e valami köze ehhez a problémához, de azt olvastam a dokumentációjukban, hogy működnie kell a mode="On"
-al. Van-e jobb módja ennek az egésznek?
SZERKESZTÉS
Most ezt használom
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/Error/Error500">
<error statusCode="404" redirect="/Error/Error404"/>
<error statusCode="500" redirect="/Error/Error500"/>
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/Error/Error404" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/Error/Error500" responseMode="ExecuteURL" />
</httpErrors>
de mindig 500-as hibát ad vissza, ha rossz URL-t írok be.
A kivétel System.Web.HttpException: The controller for path '/aBadUrllllll' was not found or does not implement IController.
Miért nem ad vissza 404-es hibát?
Változtatnom kell valamit a Route.config fájlban?