2013-08-17 3 views
12

Ho un sito Web MVC su Azure. Ho scritto un'azione del controller per sostituire una risorsa, che dovrebbe restituire HTTP 404, ma il contenuto del corpo dovrebbe essere un po 'HTML dove spiego il motivo per il 404. Questo è implementato come azione standard che imposta Response.StatusCode. Funziona bene localmente, ma quando viene distribuito in Azure, non ottengo la mia vista personalizzata, ma solo un messaggio di errore in testo normale. Ho rimosso <customErrors> su Azure per il debug, con lo stesso risultato.Gestione 404 nel sito Web di Azure

Questa è la risposta grezzo ricevuto quando schierato a 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. 

Altrettanto importante, se tolgo il percorso servire questo, ottengo una pagina di errore standard .NET 404, quindi credo che la mia azione personalizzata è correre. L'azione è semplice:

[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); 
     } 
    } 

Come è possibile visualizzare la mia visualizzazione mentre risponde allo stato HTTP 404 su Azure?

+1

@PKKG Questo non è un duplicato, questa domanda non riguarda CustomErrors (avevo customErrors abilitato, ma disabilitato per provare il debug del problema). – driis

+0

+1 per la domanda. Sono curioso di sapere come eseguire il debug dell'errore 404. e penso, ho due suggerimenti. È possibile utilizzare request_End nel file Global.axax e il secondo suggerimento è utilizzare Fiddler. –

+0

Se rimuovo solo la riga che imposta il codice di stato, ottengo la vista desiderata come previsto, ma (ovviamente) con un codice di stato 200. Ho ricevuto la risposta grezza come postata da Fiddler – driis

risposta