MVC幾種找不到資源的解決方式


在MVC中,controller中的Action和View中的.cshtml文件名稱有一個對應的關系。

當不對應時,有以下幾種情況發生:

一、找不到視圖的錯誤

請求URL:http://localhost:13850/Customer/Create

controller中有對應的Action:

View中沒有相應的視圖

報錯信息:

解決方式:在View中添加相應的View

二、找不到資源:

請求的URL:http://localhost:13850/Customer/Index

controller里沒有相應的Action(有時候可能是在開發一段時間以后,修改了Action的名字,卻沒有相應的修改View的名字,但是請求的URL依然還是原來的導致的)

View里有相應的視圖

錯誤信息:

解決方式,就是指定一個固定的“頁”,在找不到資源時顯示。具體如下:

Asp.Net MVC中的controller都是集成自Controller這個抽象類,在這個類中,定義了一個HandleUnknownAction 方法,左右就是在發生HTTP 404時,進行處理。

那么,我們可以在自己的controller里重寫這個方法。

這樣,在每次找不到相應的Action時,都能執行這個方法。去調用相應的View。

微軟提供的方式是:

protected override void HandleUnknownAction(string actionName)

 {    

    try {        

        this.View(actionName).ExecuteResult(this.ControllerContext);    

      } catch (InvalidOperationException ieox )

      {        

         ViewData["error"] = "Unknown Action: \"" +Server.HtmlEncode(actionName) + "\"";        

         ViewData["exMessage"] = ieox.Message;        

         this.View("Error").ExecuteResult(this.ControllerContext);    

      }

}

也就是,輸出錯誤頁。

當然這也存在一個隱患,如果出現下面【三】的情況時,也就是只聲明了一個HTTP.Post的方法,沒有相應的Http.Get的同名方法,也能把通過這種方式,把頁面加載出來。

怎么解決呢?答案就是:直接Response.Redirect("/",true),回到首頁。

三、找不到資源:

請求URL:http://localhost:13850/Customer/Details

controller中的對應Action,定義為HTTP Post,且沒有對應的Http Get的Action

View中有對應的視圖

報錯信息:

解決方式:加入一個同名Action,定義為HTTP GET:[AcceptVerbs(HttpVerbs.Get)]

 

四:這是我今天遇到的找半天沒找到原因,最后看http://www.cnblogs.com/xyang/archive/2011/11/24/2262003.html才發現的

 

備注,感謝http://www.cnblogs.com/xyang/archive/2011/11/24/2262003.html提供的解決辦法


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com