2011-09-09 69 views
9

我有標準的ASP.NET 4應用程序。在這個應用程序中,也有少量剃鬚刀(例如test.cshtml)文件。但是,如果我將瀏覽器指向/test文件(不帶擴展名),ASP.NET應用程序可以正常工作。 IIS(靜態文件處理程序)返回404.IIS爲ASP.NET MVC3文件(.cshtml)返回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:

注:在所有計算機上有HttpForbiddenHandler*.cshtml,因爲你不能下載CSHTML文件。 *.也有TransferRequestHandler。 (兩者都啓用。)

EDIT5:

我發現了服務器,在那裏工作,我需要有任何.cshtml文件在網站根目錄。如果我從Web根目錄中刪除.cshtml,並嘗試從子目錄中調用任何子目錄,則不起作用。

EDIT6:

我想,在另一個兩臺機器:一個IIS 7.5,另一個IIS 7.0。在IIS 7.5它工作(純安裝沒有配置),但在IIS 7.0它不起作用。

如何使它在IIS 7.0上工作?

+0

我不確定我的理解。在MVC中,你可以通過路由引擎調用一個控制器方法,使用[http:// mydomain/mycontroller/mycontrollermethod](http:// mycontroller/mycontrollermethod)等形式的URL。控制器方法調用適當的cshtml視圖。你爲什麼要直接打開視圖? –

+0

另請參閱http://stackoverflow.com/questions/4942634/asp-net-mvc-razor-how-to-directly-access-cshtml-page –

+0

由於它不是一個典型的MVC應用程序的'視圖',但而是一個簡單的腳本。 –

回答

6

耶!經過幾天的努力,我找到了! :))

的一種方式,使其在工作IIS 7.0是使runAllManagedModulesForAllRequests

<modules runAllManagedModulesForAllRequests="true" /> 

(雖然,在IIS 7.5它的工作原理,即使默認值runAllManagedModulesForAllRequests="false"

別問我爲什麼:)也許有人可以解釋一下。

+1

是的,它也在這裏解釋:) http://www.west-wind.com/weblog/posts/2011/Mar/27/ASPNET-Routing-不工作在IIS-70 – tugberk

+0

+1 Thx,我知道更早:) –

0

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

這可能會導致一些愚蠢的問題,因爲我發現。

+0

/測試不是一個目錄。它應該調用test.cshtml。而且它會返回403(不是404)。 –

0

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

我還建議設置您的項目,以便在您的開發環境中使用IISExpress以更貼近您的Web服務器。這在調試這些問題時非常有幫助。

+0

我不需要設置路線,控制器,也不需要有一個Views文件夾。我可以使用.cshtml文件,如舊的.aspx或php文件。 –

+0

@Keith設置您的開發環境以使用IIS Express與您的Web服務器不匹配。您將在您的Web服務器上運行IIS - 而不是IIS Express –

+0

@DaveBlack這個評論來自6年前VS2010風靡一時,而Cassini是默認設置。在Cassini上沒有找到但在生產IIS服務器上找到的許多問題(例如使用web.config)在IIS Express中更有可能被複制。 – Keith

0

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

例如在你的應用程序開始時就像這樣。

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

爲什麼它不在我的本地計算機和另一臺計算機上進行路由,其中​​的代碼是相同的(ASP.NET應用程序和幾個獨立的.cshtml腳本)? (只有一個服務器有404個問題。) –

+0

那麼你有沒有設置路由?你如何將無擴展名的URL映射到'.cshtml'?也許你可以顯示一些代碼?什麼版本的IIS工作,哪些不?他們都一樣嗎? – TheCodeKing

+0

根本沒有路由。嘗試在IIS中創建一個簡單的ASP.NET應用程序test.cshtml文件(例如,在裏面放置「hi」)。將瀏覽器指向該文件(不帶.cshtml擴展名)。 –

5

不知道這是你的具體問題,但它聽起來像ASP.NET網頁沒有運行(MVC 3及以上依賴於網頁的剃刀和其他東西)。有時候,事情可能會被安裝在訂單中,這些訂單會混淆ASP.NET和IIS的某些配置,從而導致Web頁面無法運行,並且不會執行cshtml文件。

嘗試運行aspnet_regiis /我清理一切。

+0

常見的ASP.NET網頁正常運行。當然,我已經運行了'aspnet_regiss/i'(用於.NET 4),但它沒有幫助(因爲它只是註冊了ASP.NET,所以我也重新安裝了ASP.NET MVC3. –

+1

更具體地說'C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319> aspnet_regiis -i' – cusman

1

沒有爲IIS7.0提供的修補程序:http://support.microsoft.com/kb/980368

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

它解決了這一問題在我身邊/不強迫:

<modules runAllManagedModulesForAllRequests="true" /> 

這比正在運行的所有模塊的任何要求一個更好的方法(甚至CSS /圖像/ ...),這將造成不必要的超載。

+0

謝謝你的信息。我不再有任何帶有IIS 7.0的Windows Server 2008,所以其他人必須證實這一點。 –

0

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

你可以認爲它是一個html,但使用剃刀語法。