大家好我知道这已被多次作为先前的问题发布,但我已经完成了每个问题和他们提出的解决方案,但我仍然无法克服我的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位模式。我尝试了很多不同的配置选项,但都无济于事。有什么想法吗?
由于 单
答案 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/