簡體   English   中英

IIS為ASP.NET MVC3文件返回404(.cshtml)

[英]IIS returns 404 for ASP.NET MVC3 file (.cshtml)

我有標准的ASP.NET 4應用程序。 在這個應用程序內部也有很少的剃刀(例如test.cshtml )文件。 但是,如果我將瀏覽器指向/test文件(沒有擴展名),ASP.NET應用程序可以工作。 IIS(靜態文件處理程序)返回404。

相同的應用程序甚至獨立的.cshtml文件在本地計算機(使用IIS7.5 / Win7)和服務器(IIS7.5 / Win2008R2)上工作,但是它不能用於IIS7.0 / Win2008的服務器。

MVC3安裝在兩台機器上,兩台機器上的應用程序池都集成了.NET 4.0。

.cshtml處理程序如何工作? 當IIS決定使用靜態文件處理程序和.cshtml處理程序時? 我還應該檢查什么?

編輯:

澄清 - 我實際上並沒有使用整個MVC框架,它就像普通的.ASPX或PHP文件。 沒有控制器,沒有路線,沒有“觀點”。 除了舊的ASP.NET應用程序之外,我將它用於一個簡單的腳本。

我認為這不是一個編程問題,因為它適用於本地計算機,而是一個配置問題 - Win2008服務器上的IIS可能沒有正確配置。

EDIT2:

(IIS7.5的機器工作,只有IIS7.0的機器不起作用。但我不確定它是否是IIS版本的問題。)

EDIT3:

在我工作的本地計算機上,我沒有設置任何路由。 TheCodeKing和Keith建議我需要在某個地方進行路由。 也許是的,但它不在我的申請中。 它可能默認設置在IIS配置中的某個位置。

您是否有任何提示可以找到這種“隱含”路由?

EDIT4:

注意:在所有計算機上都有用於*.cshtml HttpForbiddenHandler ,因為您無法下載cshtml文件。 並且還有用於*.TransferRequestHandler *. (兩者都已啟用。)

EDIT5:

我發現在服務器上,它工作的地方,我需要在Web根目錄中有任何.cshtml文件。 如果我從Web根目錄中刪除.cshtml並嘗試從子目錄中調用任何內容,它將無法正常工作。

EDIT6:

我在另外兩台機器上嘗試過這種機器:一台使用IIS 7.5 ,另一台使用IIS 7.0 IIS 7.5它可以工作(普通安裝沒有配置),但在IIS 7.0它不起作用。

如何使它在IIS 7.0上運行?

好極了! 經過幾天的掙扎,我找到了它! :))

使其在IIS 7.0上運行的一種方法是啟用runAllManagedModulesForAllRequests

<modules runAllManagedModulesForAllRequests="true" />

(盡管在IIS 7.5上它甚至可以使用默認值runAllManagedModulesForAllRequests="false" 。)

不要問我為什么:)也許有人可以解釋一下。

不確定這是否是您的特殊問題,但聽起來好像ASP.NET Web Pages沒有運行(MVC 3及更高版本依賴於Razor和其他東西的Web頁面)。 有時事情可能會被安裝在破壞ASP.NET和IIS的某些配置的訂單中,這反過來可能使Web頁面沒有運行,並且不會執行任何cshtml文件。

嘗試運行aspnet_regiis / i來清理它們。

有一個IIS7.0的修補程序,可從以下網址獲得: http//support.microsoft.com/kb/980368

我今天在Windows 2008 SP2上安裝了它(需要重新啟動操作系統)。 IIS 7.0中的行為現在與IIS 7.5類似

它解決了我的問題/沒有強制:

<modules runAllManagedModulesForAllRequests="true" />

這是比為任何請求運行所有模塊(甚至在css / images / ...上)更好的方法,這會導致不必要的過載。

如果你設置web.conf,cshtml可以工作。

您可以認為它是一個HTML,但使用剃刀語法。

您確定IIS有足夠的權限來訪問/ test目錄下的文件嗎?

正如我所發現的,這可能會導致一些愚蠢的問題。

如果這是一個asp.net 4.0 Web應用程序,您將需要手動設置路由,創建適當的控制器,並確保您的視圖(.cshtml文件)實際存在於/ Views / ControllerName文件夾中。

我還建議您設置項目以在開發環境中使用IISExpress來更緊密地匹配您的Web服務器。 在調試這些問題時,這是一個很好的幫助。

由於您沒有使用MVC,您需要設置路由,或使用IIS重寫模塊重寫以期望/test解析為/test.cshtml 沒有它你就不會得到這種行為。

例如你的應用程序中的這樣的東西開始。

routes.MapPageRoute(
   "extension-less paths",
   "{view}",
   "~/{view}.cshtml"
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM