2014-03-31 106 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