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)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章