2013-08-17 13 views
12

Mam witrynę MVC na platformie Azure. Napisałem działanie kontrolera, aby uzyskać zasób, który powinien zwrócić HTTP 404, ale treść treści powinna być kodem HTML, w którym wyjaśniam przyczynę 404. Jest to zaimplementowane jako standardowa akcja, która ustawia Response.StatusCode. Działa to dobrze lokalnie, ale po wdrożeniu na platformie Azure nie otrzymuję niestandardowego widoku, a jedynie komunikat o błędzie w postaci zwykłego tekstu. Usunąłem <customErrors> na platformie Azure w celu debugowania, z tym samym wynikiem.Obsługa 404 w witrynie Azure

To surowa odpowiedź otrzymana po wdrożeniu do Azure:

HTTP/1.1 404 Not Found 
Cache-Control: private 
Content-Length: 103 
Content-Type: text/html 
Server: Microsoft-IIS/8.0 
X-AspNetMvc-Version: 3.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
X-Powered-By: ARR/2.5 
X-Powered-By: ASP.NET 
Date: Sat, 17 Aug 2013 17:24:19 GMT 

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 

Równie ważne, jeśli usunąć trasę serwującą to, dostaję standardowy NET stronę błędu 404, więc myślę, że moje działanie jest zwyczaj uciekać. Akcja jest prosta:

[HttpGet] 
    public ActionResult LegacyMedia(string originalUrl) 
    { 
     ViewBag.OriginalUrl = originalUrl; 
     return new ViewResult404() {ViewName = "LegacyMedia"}; 
    } 

    public class ViewResult404 : ViewResult 
    { 
     public override void ExecuteResult(ControllerContext context) 
     { 
      context.HttpContext.Response.StatusCode = (int) HttpStatusCode.NotFound; 
      base.ExecuteResult(context); 
     } 
    } 

Jak mogę uzyskać renderowanie mojego widoku podczas odpowiadania HTTP Status 404 na platformie Azure?

+1

@PKKG który nie jest duplikatem, to pytanie nie dotyczy customErrors (miałem włączone customErrors, ale wyłączyłem je, aby spróbować debugować problem). – driis

+0

+1 za pytanie. Jestem ciekawy wiedzieć, jak można debugować błąd 404. i myślę, że mam dwie sugestie. Możesz użyć zdarzenia request_End w pliku Global.axax, a drugą sugestią jest użycie Fiddlera. –

+0

Jeśli usunę tylko linię ustawiającą kod statusu, otrzymam żądany widok zgodnie z oczekiwaniami, ale (oczywiście) z kodem statusu 200. Dostałem surową odpowiedź jak napisałem powyżej od Fiddlera – driis

Odpowiedz

Powiązane problemy