[英]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.