記錄一次MVC 3.0錯誤 HTTP 404您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。


在部署到IIS7時,MVC3報了一個找不到資源的錯誤,文件肯定是有的,而且頁面是肯定報錯的,也就說內部運行錯誤了,而MVC把錯誤沒有拋出來而已;

所以對症下葯,發覺我的項目里面用了rexs進行多語言,然后發現App_GlobalResources這里面的文件夾是空的,按道理來說,不應該是沒有文件才對。

所以我把App_GlobalResources文件夾重新上傳即可,問題解決。

以上是我的問題解決,以下我將介紹其它的類似的問題處理方法:

一、路徑配置問題轉載

有時在程序運行的時候會出現“HTTP 404。您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。”的錯誤提示。

在這里我們以運行時打開登錄頁面(login)為例,

一般情況下分為兩種情況:

1、錯誤原因之:路由不正確。

解決方法:打開項目的“Global.asax”文件,找到路由注冊(RegisterRoutes()) 方法,並將其中的路由中的控制器更改為“Login”,就行了。action方法一般情況下是選擇為“Index”默認的方法(如圖所示),但可以根據自己的需要進行修改,此處不做演示。

 

2、錯誤原因之:選擇了視圖中的某一項為起始項。

解決方法:

(1)、右鍵選擇該項目屬性——找到web選項。這時你會發現,特定頁選項的值正是你設為起始頁的視圖名。

(2)、將特定頁的值設置為“login”或者“login/Index”  (Index是默認的,可寫可不寫)。

(3)、運行項目。

二、錯誤捕捉問題轉載

MVC中,有一個Filter可以捕捉錯誤,但是它的用法是利用Attribute來實現的,而且只能加在Controller和Action上,所以不能捕捉別出的錯誤

其實理論上所有的錯誤肯定產生於Controller中,但有2種情況下,就不會被捕捉了

1、頁面不存在的時候,找不到對應的Controller,那沒有任何Controller被執行,所以自然也不會捕捉到錯誤了

2、在 IAuthorizationFilter 下發生錯誤的時候,錯誤捕捉代碼在IExceptionFilter中,而IAuthorizationFilter的優先權高於IExceptionFilter,所以也就捕捉不到了

protected void Application_Error(object sender, EventArgs e)
        {
            Exception exception = Server.GetLastError();
            Response.Clear();
            HttpException httpException = exception as HttpException;
            RouteData routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            if (httpException == null)
            {
                routeData.Values.Add("action", "Index");
            }
            else //It's an Http Exception, Let's handle it.
            {
                switch (httpException.GetHttpCode())
                {
                    case 404:
                        // Page not found.
                        routeData.Values.Add("action", "HttpError404");
                        break;
                    case 500:
                        // Server error.
                        routeData.Values.Add("action", "HttpError500");
                        break;
                    // Here you can handle Views to other error codes.
                    // I choose a General error template  
                    default:
                        routeData.Values.Add("action", "General");
                        break;
                }
            }
            // Pass exception details to the target error View.
            routeData.Values.Add("error", exception.Message);
            // Clear the error on server.
            Server.ClearError();
            // Call target Controller and pass the routeData.
            IController errorController = new WEB.Controllers.ErrorController();
            errorController.Execute(new RequestContext(
           new HttpContextWrapper(Context), routeData));
        }
View Code

把這段代碼放到 Global.asax 中,並且新建一個 Controller 叫做 Error

namespace MVC.Controllers
{
    public class ErrorController : Controller
    {
        public ActionResult Index(string error)
        {
            ViewData["Title"] = "WebSite 網站內部錯誤";
            ViewData["Description"] = error;
            return View("Index");
        }
        public ActionResult HttpError404(string error)
        {
            ViewData["Title"] = "HTTP 404- 無法找到文件";
            ViewData["Description"] = error;
            return View("Index");
        }
        public ActionResult HttpError500(string error)
        {
            ViewData["Title"] = "HTTP 500 - 內部服務器錯誤";
            ViewData["Description"] = error;
            return View("Index");
        }
        public ActionResult General(string error)
        {
            ViewData["Title"] = "HTTP 發生錯誤";
            ViewData["Description"] = error;
            return View("Index");
        }
    }
}
View Code

這樣,就可以捕捉所有錯誤了。

但其實,這樣也不是完美的,因為如果你參考了我第一個問題中,在IIS6下不修改IIS設置,運行了MVC,那當后綴名不是.aspx的時候,錯誤不會被捕捉

因為這時候輸入的地址根本沒有交給網站來處理,IIS直接拋出了錯誤,因為IIS認為這個后綴名不是你所能執行的.

 

以上內容如果有幫助,點個贊唄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 MVC 3.0錯誤 HTTP 404您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。 錯誤提示之(MVC3.0):HTTP 404。您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。 HTTP 錯誤 404.0 - Not Found 您要找的資源已被刪除、已更名或暫時不可用。 解決:HTTP 錯誤 404.0 - Not Found.您要找的資源已被刪除、已更名或暫時不可用。(記錄帖) We7<001>--We7 CMS之報錯: HTTP 錯誤 404.0 - Not Found 您要找的資源已被刪除、已更名或暫時不可用。 IIS7.5 報錯 HTTP 錯誤 404.0- Not Found 您要找的資源已被刪除、已更名或暫時不可用 解決方案··· IIS 發布之后 您要找的資源已被刪除、已更名或暫時不可用。 404.0 解決方法 vscode報錯npm : 無法將“npm”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。 所在位置 行:1 字符: 1 問題解決:export : 無法將“export”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。 無法將“add-migration”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM