2009-10-21 9 views
4

J'utilise Application_Error pour récupérer certaines URL héritées et certains raccourcis d'URL. En Global.vb j'ai ce code:Serveur Web de développement tire Application_Error sur 404, pourquoi IIS7?

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
     Dim serverError = TryCast(Server.GetLastError(), HttpException) 
     If serverError IsNot Nothing Then 
      Dim errorCode As Integer = serverError.GetHttpCode() 
      If 404 = errorCode Then 
       ' Do some custom processing here 
      End If 
     End If 
    End Sub 

Dans web.config je cela, pour faire en sorte que toutes les demandes, pas seulement ceux qui se terminent en .aspx, sont gérées par aspnet_isapi.dll donc j'apprendre à les traiter :

 <add name="ASP.NET-ISAPI-2.0-Wildcard" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> 

sur ma boîte de développement (à l'aide de Cassini), cela fonctionne très bien dans tous les cas: les deux/BADURL et /badurl.aspx provoquent Application_Error au feu. En revanche, dans IIS7, /badurl.aspx fonctionne comme prévu, mais/badurl ne génère qu'une page générique 404 générée par le serveur.

Des idées sur les causes de la différence et comment IIS7 peut-il répliquer le comportement du serveur de développement?

Répondre

0

essayez d'ajouter ceci au fichier web.config.

<customErrors mode="On" defaultRedirect="appError.aspx"> 
      <error statusCode="403" redirect="appError.aspx"/> 
      <error statusCode="404" redirect="appError.aspx"/> 
     </customErrors> 
+0

Merci - I déjà cela. –

+0

doit être à l'intérieur des balises hogarth45

0

Vous pouvez essayer de deux façons:

  1. dans votre code, vous pouvez définir Response.TrySkipIisCustomErrors = true;
  2. dans le fichier de configuration, vous pouvez définir:

<customErrors redirectMode="ResponseRewrite mode="On" defaultRedirect="appError.aspx" />

+0

Où 'Response.TrySkipIisCustomErrors = true' go? Le problème est que mon code n'est pas touché du tout, pour autant que je sache. (J'ai déjà l'entrée '' dans web.config). –

+0

@Herb 'Response.TrySkipIisCustomErrors = true' irait dans la méthode body of you. Disons immédiatement après Sub Application_Error (Expéditeur ByVal As Object, ByVal et As EventArgs), en ce qui concerne les requêtes , vérifiez si votre entrée possède cet attribut redirectMode = "ResponseRewrite". Vous ne devez pas avoir les deux. C'est l'un ou l'autre. Je recommanderais le deuxième. – Enes

Questions connexes