2011-06-09 14 views
24

Sto provando a impostare una pagina di errore 404 personalizzata per la mia applicazione web. Il problema è che questa applicazione verrà distribuita in un numero di ambienti diversi. A volte sarà in una directory virtuale ea volte no.È possibile utilizzare un percorso relativo quando si imposta una pagina di errore personalizzata in IIS7?

Ho la pagina di errore in una directory chiamata ErrorPages e hanno istituito la mia configurazione in questo modo:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

Il guaio è quando schiero questo alla radice di un sito web, la parte /VirtualDir ha bisogno di essere rimosso. Se lo rimuovo prima della distribuzione, devo aggiungerlo nuovamente quando si esegue la distribuzione in una directory virtuale. C'è un modo in cui posso impostare il percorso per essere relativo alla directory virtuale e non al sito?

Ho provato con un ~, ma questo non funziona nemmeno, in questo modo:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="~/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 
+3

sembra che la risposta breve è: no, non è possibile utilizzare un percorso relativo quando si imposta una pagina di errore personalizzata in IIS7! –

+0

Martin, ti credo, ma hai una citazione? – Michael

+3

@ Michael [questo collegamento] (http://www.iis.net/configreference/system.webserver/httperrors/error#005) afferma che l'URL deve essere un URL relativo al server, non un URL relativo all'applicazione quando si utilizza 'responseMode = "ExecuteURL" '. – WolfyUK

risposta

2

stavo affrontando problema simile, così ho usato il codice lato server per reindirizzare alla pagina CustomError con l'URL generati dinamicamente (con o senza directory virtuale) anche se ~/reindirizza correttamente per correggere il percorso da qui.

Quando si verifica un errore nei fuochi applicazione Application_Error e alla fine questo blocco di codice viene generato:

if (App.Configuration.DebugMode == DebugModes.ApplicationErrorMessage) 
{      
    string stockMessage = App.Configuration.ApplicationErrorMessage; 

    // Handle some stock errors that may require special error pages 
    HttpException httpException = serverException as HttpException; 
    if (httpException != null) 
    { 
     int HttpCode = httpException.GetHttpCode(); 
     Server.ClearError(); 

     if (HttpCode == 404) // Page Not Found 
     { 
      Response.StatusCode = 404; 
      Response.Redirect("~/ErrorPage.aspx"); // ~ works fine no matter site is in Virtual Directory or Web Site 
      return; 
     } 
    } 

    Response.TrySkipIisCustomErrors = true; 
    Response.StatusCode = 404; 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 

Invece di scrivere percorso pagina in httpErrors sezione del web.config è possibile creare un ambiente app e percorso di salvataggio Là. Nel codice sottostante puoi ottenere il percorso dall'impostazione e reindirizzamento dell'app come descritto sopra.

ho trovato un altro link e lui ha spiegato meglio di me quindi basta andare se http://labs.episerver.com/en/Blogs/Ted-Nyberg/Dates/112276/2/Programmatically-configure-customErrors-redirects/

4

Si potrebbe usare web.config trasforma per impostare il percorso per ambiente:

web. config

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

web.Release.config

<httpErrors> 
    <error statusCode="404" path="/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 
Problemi correlati