Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Web.config e redirect 404

    ciao!

    in un progetto asp.net sto cercando di impostare il redirect in caso di 404.
    ho aggiunto questo nel web.config:
    codice:
       <customErrors mode="On">
          <error statusCode="404" redirect="https://www.sito.com/" />
        </customErrors>
    se vado in http://localhost:4874/pagina_sbagliata non viene fatto il redirect, ma mi compare questo:
    codice:
        HTTP Error 404.0 - Not Found    La risorsa desiderata è stata rimossa, rinominata o è temporaneamente non disponibile.
    dove sbaglio??

  2. #2
    faccio una correzione.

    se metto un indirizzo sbagliato così funziona:
    codice:
    http://localhost:4874/sbgliato.aspx


    così no:
    codice:
    http://localhost:4874/sbgliato
    http://localhost:4874/sbgliato.html
    in sostanza senza estensione aspx.
    Ultima modifica di djciko; 04-05-2019 a 15:39

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,576
    perche' quella regola in configurazione non viene gestita da IIS, che per le estensioni diverse da quelle proprietarie del framework fa a modo suo (cioè ti visualizza quella 'standard')

    ci sono due alternative:

    1- farlo direttamente in IIS (da qualche parte ci sono censiti i vari 500, 404 etc, gestendo in qualche modo -che non ricordo- le estensioni)

    2- farlo dal Global.asax, all'evento Application_BeginRequest(object sender, EventArgs e), dove puoi controllare con le classi del System.IO se quella pagina esiste (ovviamente ricavandoti il nome della pagina dall'URL), ed in caso negativo fare un redirect alla paginetta classica "Oops.html"
    Ultima modifica di djciko; 04-05-2019 a 15:42

  4. #4
    ciao!

    non posso mettere mano alla configurazione del server, quindi ho creato il Global.asax con questo dentro:
    codice:
    <%@ Application Language="C#" %>
    <%@ Import Namespace="System.IO" %>
    
    <script RunAt="server">
        internal protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string path = HttpContext.Current.Request.Url.AbsolutePath;
            if (!File.Exists(path.Replace("/", "")))
            {
                Response.Redirect("https://www.sito.com/");
            }
        }
    
        void Application_Start(object sender, EventArgs e)
        {
        }
    
        void Application_End(object sender, EventArgs e)
        {
        }
    
        void Application_Error(object sender, EventArgs e)
        {
        }
    
        void Session_Start(object sender, EventArgs e)
        {
        }
    
        void Session_End(object sender, EventArgs e)
        {
        }
    </script>
    sembrerebbe funzionare.
    intendevi questo??

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,576
    si, intendevo questo, anche se il global.asax ha un aspetto diverso ora, mi pare.

    Come dicevo, la cosa che chiedevi è dovuta al fatto che alcuni codici di errore sono gestiti dal web.config/framework, altri (non nativi di ASP.Net), dall'application server, IIS.

    Come spiega appunto un articolo sulla configurazione per il redirect alle pagine di errore (https://docs.microsoft.com/en-us/asp...-error-page-cs)


    <customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx"><error statusCode="404" redirect="~/ErrorPages/404.aspx" /></customErrors>

    The custom error page is only displayed when a request is made to a resource handled by the ASP.NET engine. As we discussed in the Core Differences Between IIS and the ASP.NET Development Server tutorial, the web server may handle certain requests itself. By default, the IIS web server processes requests for static content like images and HTML files without invoking the ASP.NET engine. Consequently, if the user requests a non-existent image file they will get back IIS's default 404 error message rather than ASP.NET's configured error page.
    Ultima modifica di djciko; 04-05-2019 a 15:42

  6. #6
    ciao!

    allora, confermo che non posso toccare la configurazione di IIS.

    però il codice sopra non funziona.
    in pratica mi dice sempre che il file non esiste.
    penso sia un errore di percorso, forse devo cercare i file in altra maniera nel path del server.

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,545
    path.Replace("/", "")

    ?
    mettilo in debug e vedi cosa ti restituisce
    File.exists vuole un percorso di tipo c:\temp\test.txt
    Ultima modifica di supermac; 08-05-2019 a 11:12
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    questo:
    codice:
    string path = HttpContext.Current.Request.Url.AbsolutePath;
    mi restituiva questo:
    codice:
    /Blog.aspx
    cmq forse ho risolto così:
    codice:
        internal protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string path = HttpContext.Current.Request.Url.AbsolutePath;
            string absPath = HttpContext.Current.Server.MapPath("~/" + path.Replace("/", "").ToLower());
            if (!File.Exists(absPath))
            {
                Response.Redirect("~/Default.aspx");
            }
        }

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,576
    prova:
    codice:
    internal protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (!File.Exists(Server.MapPath(Page.AppRelativeVirtualPath)))
            Response.Redirect("~/Default.aspx");
    }
    Ultima modifica di djciko; 09-05-2019 a 14:55

  10. #10
    Quote Originariamente inviata da djciko Visualizza il messaggio
    prova:
    codice:
    internal protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (!File.Exists(Server.MapPath(Page.AppRelativeVirtualPath)))
            Response.Redirect("~/Default.aspx");
    }
    ciao!
    il codice che ho postato funziona.
    l'ho messo anche in produzione.

    cmq appena posso provo anche il tuo.
    non so che differenze ci siano.

    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.