2014-03-31 80 views
0

我正在做一个作为Azure网站托管的ASP.NET MVC 5网站,并且我已经包含了用于错误记录的ELMAH。一切似乎做工精细,除了我发现许多错误,像这样的:ELMAH记录的错误没有意义

公共动作方法“...”没有在控制器发现...

出现这些错误主要是当请求来自蜘蛛机器人,但他们似乎没有在响应中产生任何错误。此外,所有记录的控制器/操作名称都是完全有效的。

E.g.当我在我的网站上运行类似deadlinkchecker.com的工具时,我发现ELMAH中有数百个错误,而该工具生成的报告具有100%的有效链接。 ELMAH中的路径信息也是正确的。

为什么我看到这些错误?

+0

取决于您的错误处理如何工作。仅仅因为Elmah记录了一个错误并不意味着你没有返回一个状态为200的404页的页面。如果你提供了你的错误处理代码,可能会更容易调试。 –

+1

这些操作是否标记为POST?蜘蛛只会做GET请求 –

+0

@ErikPhilips:没有错误处理代码。它全部在web.config中配置。 system.web/customErrors + system.webServer/httpErrors + elmah/errorLog(xml)。另外,如果Elmah记录上面的控制器/动作不匹配,为什么它能正常工作? – Koen

回答

2

如果您添加Head以及Get,则此错误将消失,并且蜘蛛将正确地读取您的站点。正如Nathan所说,你可以关闭它们,但是你并没有真正解决这个问题,只是忽略它而且如果蜘蛛无法读取你的站点,你可能会失去100%

这应该可行,让小提琴出来试试吧!

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] 
public ActionResult Test() 
{ 
    return View(); 
} 
+0

这与[HttpGet,HttpHead]相同吗? – Koen

+1

是的,这是一样的。我现在在我的Mac上(现在不是Boot Camped),所以无法测试它。 (我通常喜欢首先测试我的答案) –

+1

显然它是不一样的(至少不是在MVC5中)。 [HttpGet,HttpHead]需要两个动词(并且因此将不响应)。 AcceptVerbs允许列出的动词之一(标志逻辑)。另见:http://stackoverflow.com/a/8354511/192961 – Koen