asp.net mvc 3和elmah.axd - 又是404

时间:2011-03-01 03:03:10

标签: asp.net-mvc-3 elmah

大家好我知道这已被多次作为先前的问题发布,但我已经完成了每个问题和他们提出的解决方案,但我仍然无法克服我的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( “{}资源个.axd / {*} PATHINFO”);

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

由于 单

5 个答案:

答案 0 :(得分: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 :(得分: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将其锁定。

答案 2 :(得分: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>

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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