2011-03-01 20 views
4

大家好,我知道這已經作爲先前的問題發佈了好幾次,但我已經通過了每個問題和他們提出的解決方案,我仍然不是能夠超越我的404問題。我正在運行Elmah 1.1 32位。我提到ASP.NET MVC - Elmah not working and returning 404 page for elmah.axd,但在應用這些建議後我還沒有運氣。asp.net mvc 3和elmah.axd - 又一個404

我運行ASP.NET MVC 3,這裏是我的web.config:

...

<httpHandlers> 
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
</httpHandlers> 
<httpModules> 
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/> 
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
</httpModules> 

...

<errorLog type="Elmah.SqlErrorLog, Elmah" 
    connectionStringName="dbconn" /> 

    <errorFilter> 
     <test> 
      <jscript> 
       <expression> 
       <![CDATA[ 
       // @assembly mscorlib 
       // @assembly System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
       // @import System.IO 
       // @import System.Web 

       HttpStatusCode == 404 
       || BaseException instanceof FileNotFoundException 
       || BaseException instanceof HttpRequestValidationException 
       /* Using RegExp below (see http://msdn.microsoft.com/en-us/library/h6e2eb7w.aspx) */ 
       || Context.Request.UserAgent.match(/crawler/i)      
       || Context.Request.ServerVariables['REMOTE_ADDR'] == '127.0.0.1' // IPv4 only 
       ]]> 
       </expression> 
      </jscript> 
     </test> 
    </errorFilter> 

我有使用忽視了我個.axd路線: routes.IgnoreRoute( 「{}資源個.axd/{*} PATHINFO」);

我在IIS7上啓動了32位模式的網站。我試過很多不同的配置選項,但都無濟於事。有任何想法嗎?

感謝 山

回答

3

我的不好。我的.axd忽略路由規則是在默認路由映射之後排序的。默認路由映射規則與URL elmah.axd相匹配。我想我沒有意識到無視規則必須在此路線上方列出。謝謝大家的幫助!

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     } // Parameter defaults 
    ); 

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

在默認路由映射解決此問題之前,只需移動routes.IgnoreRoute("{resource}.axd/{*pathInfo}");即可。

1

你試過嗎?

<configuration> 
    <system.webServer> 
     <handlers> 
      <add name="elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </handlers> 
    </system.webServer> 
</configuration> 

也確保從普通用戶安全elmah.axd位置:

<location path="elmah.axd"> 
    <system.web> 
     <authorization> 
      <allow roles="Admin" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 
+0

已經得到了。我認爲我有 ...以及 – 2011-03-07 04:26:19

+0

中的所有其他配置的東西是服務器本地還是遠程?如果遙控器,您可能需要啓用遠程訪問 \t <安全allowRemoteAccess =「1」 /> 你可能也想嘗試註釋掉部分,看看它是否造成您的問題。 – 2011-03-08 00:52:55

+0

這是一個本地服務器,我有allowRemoteAccess = 1,並且我已經註釋掉了所有部分。 Elmah成功登錄到我的SQL Server數據庫。唯一的問題是我無法訪問elmah.axd資源。很奇怪! – 2011-04-29 02:19:38

0

在asp.net的MVC 3周的global.asax.cs文件

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     //filters.Add(new HandleErrorAttribute()); 
    } 

HandleErrorAttribute會吞噬一切例外情況,ELMAH無法處理。

見喬的博客http://joel.net/wordpress/index.php/2011/02/logging-errors-with-elmah-in-asp-net-mvc3-part1/

+0

謝謝,我試了一下,並審查了博客,但沒有運氣 - 我仍然得到404試圖訪問elmah.axd – 2011-04-29 02:15:35

2

複製.dll文件到你的bin和參考...添加ELMAH默認爲configSections

不要把system.webServer內部處理程序如上所述,嘗試system.web部分喜歡這個,而不是在你的web.config。

<system.web> 
    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers>  
</system.web> 

請留下您的Global.asax默認:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

,瀏覽到本地AXD

那麼如果工作,與配置部分Gedas公司上述鎖定下來。

+0

感謝ScottR,我試圖刪除system.webServer配置,但我仍然得到404.我的箱子中有DLL,它在我的VS.NET項目設置中被引用。我也有routes.IgnoreRoute()。不知道爲什麼它不起作用 – 2011-05-18 03:29:06

1

由於SQLServer Compact數據庫超過了默認的最大文件大小,我得到了404錯誤。剛剛刪除了SDF數據文件,404就消失了。