【问题标题】:asp.net mvc 3 and elmah.axd - yet another 404asp.net mvc 3 和 elmah.axd - 又一个 404
【发布时间】:2011-07-06 05:21:28
【问题描述】:

大家好,我知道这已多次作为先前的问题发布,但我已经浏览了每个问题及其提出的解决方案,但我仍然无法解决我的 404 问题。我正在运行 Elmah 1.1 32 位。我提到了ASP.NET MVC - Elmah not working and returning 404 page for elmah.axd,但在应用建议后我没有任何运气。

我正在运行 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("{resource}.axd/{*pathInfo}");

我在 IIS7 上运行该站点,启用了 32 位模式。我尝试了许多不同的配置选项,但都无济于事。有什么想法吗?

谢谢 山

【问题讨论】:

    标签: asp.net-mvc-3 elmah


    【解决方案1】:

    我的错。我的 .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}");

    【讨论】:

      【解决方案2】:

      将 .dll 复制到您的 bin 并参考...将 elmah 默认值添加到 configSections

      不要像上面提到的那样将处理程序放在 system.webServer 中,而是在 web.config 中尝试这样的 system.web 部分。

      <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 将其锁定。

      【讨论】:

      • 感谢 ScottR,我尝试删除 system.webServer 配置,但仍然得到 404。我的 bin 中有 dll,它在我的 VS.NET 项目设置中被引用。我也有 routes.IgnoreRoute() 。不知道为什么它不起作用
      【解决方案3】:

      你试过了吗?

      <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>
      

      【讨论】:

      • 已经知道了。我认为我也拥有 ... 中所需的所有其他配置内容
      • 服务器是本地的还是远程的?如果远程,您可能需要启用远程访问 您可能还想尝试注释掉 部分以查看它是否导致您的问题。
      • 这是一个本地服务器,我有 allowRemoteAccess = 1,并且我已经注释掉了所有 部分。 Elmah 已成功登录到我的 SQL Server 数据库。唯一的问题是我无法访问 elmah.axd 资源。很奇怪!
      【解决方案4】:

      由于 SQLServer Compact 数据库超过默认的最大文件大小,我收到 404 错误。刚刚删除了 SDF 数据文件,404 就消失了。

      【讨论】:

        【解决方案5】:

        在 asp.net mvc 3 global.asax.cs 文件中

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

        HandleErrorAttribute 将吞下所有异常,没有任何东西可供 ELMAH 处理。

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

        【讨论】:

        • 谢谢,我试了一下并查看了博客,但没有运气 - 我在尝试访问 elmah.axd 时仍然收到 404
        猜你喜欢
        • 2011-01-08
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多