ASP.NET MVC pada IIS 7.5

338

Saya menjalankan Windows 7 Ultimate (64 bit) menggunakan Visual Studio 2010 RC. Saya baru-baru ini memutuskan untuk menjalankan VS / debug aplikasi saya di IIS daripada server dev yang menyertainya.

Namun, setiap kali saya mencoba menjalankan aplikasi MVC, saya mendapatkan kesalahan berikut:

Kesalahan HTTP 403.14 - Terlarang Server Web dikonfigurasikan untuk tidak mencantumkan konten direktori ini. Terperinci

Informasi Kesalahan

Modul DirektoriListingModule

Pemberitahuan ExecuteRequestHandler

Handler StaticFile Error

Kode 0x00000000 Diminta

URL http: // localhost: 80 / mySite /

Jalur Fisik C: \ myProject \ mySite \

Metode Logon Logon Anonim

Pengguna Anonim

Saya menempatkan default.aspxfile di direktori dan saya menerima kesalahan berikut:

HTTP Error 500.21 - Handler Kesalahan Server Internal "PageHandlerFactory-Integrated" memiliki modul buruk "ManagedPipelineHandler" dalam daftar modulnya

Apakah ada langkah lain yang saya lupa ambil untuk membuatnya bekerja?

Catatan: Saya menginstal IIS 7.5 setelah menginstal VS 2010 RC. Saya menggunakan built-in "Buat Direktori Virtual" tombol di bawah "Web" tab di "Properti" proyek MVC di Visual Studio 2010. Saya memastikan bahwa aplikasi menggunakan ASP.NET 4 App Pool.

Di bawah ini adalah fitur yang terinstal IIS yang saya miliki.

teks alternatif

Omar
sumber
Oke, saya punya masalah serupa dan hanya muncul di situs ASP.NET MVC 3. Situs web ASP.NET MVC 2 berfungsi dengan baik. Saya menempatkan file Default.aspx di root situs web dan dijemput dengan baik, tidak masalah. Saya telah menggunakan bin-situs ASP.NET MVC 3 menggunakan VS2010 SP1 dan masih tidak ada sukacita. Aku pada akalku berakhir dengan ini.
Umar Farooq Khawaja
5
Saya mengalami masalah yang sama. Saya telah mengatur aplikasi untuk menggunakan 4.0 terintegrasi, menjalankan perintah registrasi untuk mendaftar .NET dengan IIS (7.5) dan masih mendapatkan kesalahan ini.
Collin White
2
Saya akhirnya bisa menemukan masalah dalam set saya sampai, yang adalah bahwa saya telah berganti nama file _Layout.cshtmlke _PageLayout.cshtmldan telah membuat yang sesuai perubahan _ViewStart.cshtmljuga, tapi ternyata itu tidak cukup. Setelah saya mengembalikan nama _Layout.cshtml, itu mulai berfungsi. Apa yang membingungkan adalah yang _PageLayout.cshtmldiambil dengan benar pada Win7 32 bit tetapi tidak dijemput pada Win7 64 bit atau WinSvr2K8 R2.
Umar Farooq Khawaja
3
Adakah yang menemukan solusi untuk ini pada Windows 8 dengan IIS 8?
Eric Z Beard
3
Jika Anda menggunakan Windows Server 2012 atau jendela 8 lihat ini: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Jawaban:

499

ASP.NET 4 tidak terdaftar di IIS. Harus menjalankan perintah berikut di command line / run

32bit (x86) Windows

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

64bit (x64) Windows

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Catatan dari komentar David Murdoch:

Bahwa versi .net telah berubah sejak Jawaban ini diposting. Periksa versi kerangka mana yang ada di direktori% windir% \ Microsoft.NET \ Framework64 dan ubah perintah sesuai sebelum dijalankan (saat ini v4.0.30319)

Omar
sumber
9
Catat "64" di Framework64 untuk Windows 64-bit! yang menggigit saya di * ss. Saya harus menginstal versi 32 bit 4 atau 5 kali tanpa efek.
Ben Lesh
14
Bahwa versi .net telah berubah sejak Jawaban ini diposting. Periksa versi kerangka mana yang ada di %windir%\Microsoft.NET\Framework64direktori dan ubah perintah yang sesuai sebelum dijalankan (saat ini v4.0.30319).
David Murdoch
1
untuk menambahkan ke @blesh, jika Anda memiliki 64-bit dan menjalankan aspnet_regiis.exe 32-bit, itu mungkin hanya menampilkan kembali opsi dan tidak melakukan apa pun
xster
3
Jika perintah aspnet_regiis.exe hilang dari folder .net framework, unduh installer framework .net penuh microsoft.com/download/en/…
warrickh
11
Ini tidak berfungsi di IIS8 btw, jika Anda mencoba "" Opsi ini tidak didukung pada versi sistem operasi ini. Administrator sebaliknya harus menginstal / uninstall ASP.NET 4.5 dengan IIS8 menggunakan "Aktifkan / Nonaktifkan Fitur Windows" dialog, alat manajemen Server Manager, atau alat baris perintah dism.exe. Untuk lebih jelasnya silakan lihat go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro
199

Satu hal lagi untuk memastikan Anda memiliki set berikut di web.config Anda:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
sumber
23
Itu berhasil untuk saya. Terima kasih
boca
5
Juga memecahkannya untukku. Anehnya ia bekerja secara lokal di VS2010 IIS Express tanpa pengaturan itu.
Phil
8
Jika Anda tidak ingin mengatur runAllManagedModulesForAllRequests(yang berjalan bahkan untuk file statis) Anda dapat menginstal perbaikan terbaru Microsoft: microsoft.com/download/en/… .
Justin Helgerson
10
Cobalah untuk menghindari ini dengan menambahkan modul perutean: britishdeveloper.co.uk/2010/06/...
Chris Herring
Jika Anda menggunakan VS2013 dan mencoba untuk berjalan di IIS 7.5 - Anda perlu menambahkan ini
KenL
77

Pastikan Anda memiliki set berikut di web.config Anda:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>

Solusi yang lebih baik:

Meskipun solusi di atas berfungsi dengan sangat baik , itu dapat menyebabkan masalah lain karena menjalankan semua modul HTTP Anda yang terdaftar pada setiap permintaan (bahkan pada setiap permintaan .jpg .gif .css .html .pdf dll) dan ini jelas merupakan pemborosan sumber daya. Sebagai gantinya

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

Pastikan atribut preCondition kosong berarti itu akan berjalan pada semua permintaan. [Baca lebih lanjut] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Baca pos asli")

Premchandra Singh
sumber
6
Ini memperbaiki 403.14 di root, dan 404 pada metode pengontrol lain untuk aplikasi MVC saya. Namun, masih ada sesuatu yang mencurigakan di sini, karena saya memiliki aplikasi lain yang berjalan di server yang sama dengan pengaturan situs yang terlihat sama, dan berfungsi tanpa pengaturan ini. Ini adalah web.config yang dibuat oleh template proyek SPA milik VS 2012, bekerja dengan baik pada kotak saya tetapi tidak ketika dipublikasikan.
shannon
4
Ya, jadi perangkat pengembangan saya berisi <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, dalam Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configdan tampaknya telah dimodifikasi pada tanggal pemasangan VS 2012 saya. Jadi, pertanyaan selanjutnya adalah, apa yang ada di proyek saya yang lain yang membuatnya berfungsi?
shannon
Perhatikan bahwa tampaknya bukan yang %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irdisarankan oleh solusi teratas yang menetapkan default apa pun yang harus ada pada perangkat pengembangan saya. Perintah itu tidak menyelesaikan masalah bagi saya setelah saya menghapus referensi UrlRoutingModule.
shannon
Itu berfungsi pada Windows Server 2008 R2 IIS 7 untuk ASP.NET MVC 5. Terima kasih!
Ervi B
42

Alasan lain mengapa seseorang mungkin mendapatkan kesalahan ini adalah jika file Global.asax tidak ada dalam folder root lagi.

ZippyV
sumber
4
Yap - installer yang saya tulis tidak membawa file ini. Terima kasih!
zadam
4
Ini juga masalah saya. Saya tidak akan pernah menduga berdasarkan gejala 403 bahwa aplikasi saya tidak ada Global.asax
Saul Dolgin
3
Juga memperbaikinya untuk saya: mematikan pra-kompilasi dalam opsi publish ( global.asaxhanya file yang terpengaruh).
Richard
1
Ini memang trik untuk saya. Masalahnya adalah bagi saya, dan saya mendengar banyak orang lain, global.asax dihasilkan setiap kali LAIN yang saya terbitkan. Adakah yang tahu cara menghasilkannya setiap saat?
Greg Z.
Terima kasih, perbaiki masalah saya. Aplikasi berjalan pada ASP.NET MVC 4.0, Framework 4.0. Di-host di Arvixe.
Joe King
20

Saya juga menerima kesalahan ini dan menemukan bahwa "Pengalihan HTTP" tidak diaktifkan di Windows Server. Posting blog ini menunjukkan hal ini juga: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
sumber
6
Dari semua benda sialan itu, ini dia. Saya mencari kemana-mana, dan bermain dengan pengaturan keamanan selama beberapa jam, aspnet_regiis, dan seterusnya. Bayi manis yesus pada gulungan kaiser yang rapuh.
Andrew Backer
Saya telah menghabiskan sepanjang hari untuk ini. Terima kasih banyak.
Pradeep
Untuk Windows 8, saya masih mendapatkan kesalahan setelah mengaktifkan Pengalihan HTTP. Harus melakukan ini sebagai langkah kedua: Tambahkan peran ASP.NET 4.5 di bawah Layanan Informasi Internet -> Layanan World Wide Web -> Fitur Pengembangan Aplikasi serverfault.com/questions/514091/…
dreamerkumar
Perhentian kedua memecahkan masalah saya. Beberapa mesin berfungsi tanpanya, tetapi yang lain ini sangat penting. Terima kasih.
Alexis Heijmeijer
15

Yesus yang manis. Saya mencoba semua hal di atas (tetapi menemukan pengaturan saya identik). NAMUN SOLUSI LAIN jika Anda mengalami masalah:

http://support.microsoft.com/kb/980368

Coba pasang KB ini untuk sistem Anda. Jika Anda melihat 404-an itu mungkin karena Anda tidak memiliki pembaruan ini - dan modul isapi tidak ditemukan dan tidak banyak yang dapat Anda lakukan tanpa ini!

Sean Anderson
sumber
1
Diselesaikan untuk saya pada server 32-bit yang menjalankan Server 2008 SP2 (bukan R2)
Simon C
7

Bagi saya pada Azure Server 2012 R2 IIS 8.5 VM dengan aplikasi Asp.Net MVC 5 (bin dikerahkan MVC 5) Saya harus melakukan hal berikut dari prompt cmd yang ditinggikan walaupun saya sudah menginstal 4,5:

dism /online /enable-feature /featurename:IIS-ASPNET45

Sumber: http://support.microsoft.com/kb/2736284

Saya juga brute force memasang semua fitur IIS dengan PowerShell berikut:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Sumber: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Sekarang aplikasi saya berfungsi.

Jon Kragh
sumber
'Buang' yang satu bekerja untuk saya (tanpa menerapkan perubahan yang diusulkan lainnya). Saya hanya perlu mengganti tombol '/ semua' sampai akhir untuk memastikan bahwa semua fitur 'induk' telah diinstal juga.
Jeroen Ritmeijer
Ini berhasil untuk saya. Menjalankan MVC 5 dengan .NET 4.5 di Windows Server 2012. IIS secara default tidak akan menginstal .NET 4.5.
DPac
6

Kami memiliki aplikasi MVC yang dipindahkan ke server baru. .NET 4 dan MVC 3 diinstal, tetapi kami masih mendapatkan "Kesalahan 403.14". Dalam hal ini, ini berarti bahwa IIS tidak mengerti bahwa ia berurusan dengan aplikasi MVC, ia mencari halaman default.

Solusinya sederhana: Pengalihan HTTP tidak diinstal di server.

Server Manager - Peran - Server Web (IIS) - Layanan Peran - Pengalihan HTTP: Tidak diinstal. Dipasang, masalah terpecahkan.

Bjarne Havnen
sumber
1
apa itu Server Manager? dimana saya menemukannya?
Elad Katz
Server Manager terletak di Alat Administratif
udog
5

Juga jika aplikasi Anda dikompilasi, Anda harus memiliki

PrecompiledApp.config

di folder root aplikasi Anda jika tidak, Anda bisa mendapatkan HTTP Error 403.14juga.

pvasek
sumber
Saya punya file di sana untuk beberapa alasan meskipun aplikasi saya tidak dikompilasi. Menghapus file dan berfungsi sekarang. Terima kasih!
vaindil
Saya akan sangat senang jika saya melihat jawaban ini sebelum menghabiskan 2 jam dan menyelesaikannya sendiri ..
sotn
4

Solusi lain yang mungkin, jika Anda bergerak di sekitar global.asax Anda, pastikan markup menunjuk ke kelas MvcApplication yang benar. Semoga ini akan menyelamatkan seseorang di masa depan.

AaronHS
sumber
4

Saya telah menggunakan WebDeploy IIS Extension untuk mengimpor situs web saya dari IIS6 ke IIS7.5, jadi semua pengaturan IIS persis seperti yang ada di lingkungan produksi. Setelah mencoba semua solusi yang disediakan di sini, tidak ada yang bekerja untuk saya, saya hanya perlu mengubah pengaturan App Pool untuk situs web dari Classic ke Integrated.

Michael Bianchi
sumber
4

Saya tiba-tiba menemui masalah 404.14 yang sama. Akhirnya masalah telah diperbaiki dengan menghapus centang "precompile while publishing" di pengaturan profil publish.

pengguna985287
sumber
Sama disini. Penerbitan tidak ada masalah sampai hari ini - menghapus centang menyelesaikannya. Anehnya
Sir Rufo
4

Saya mengubah rute default saya pada satu titik dari:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

Untuk:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

Yang memberi saya kesalahan Anda. Senang seseorang menyebutkan perutean karena saya mungkin akan melakukan ini selamanya.

Nate-Wilkins
sumber
4

Dalam kasus saya ASP.NET 4.5 tidak diinstal di server sehingga menginstal ASP.NET 4.5 memperbaiki masalah ini.

Saif
sumber
4

Anda dapat mengatasi kesalahan ini dengan menjalankan cmd sebagai admin daripada masukkan deskripsi gambar di sini

Lakukan hal yang sama seperti pada gambar untuk windows 32 bit

Buat saja perubahan dalam 64 bit sebagai framework64 alih-alih hanya kerangka Lalu pergi ke iis dan menyegarkan situs
Jika Anda masih mendapatkan kesalahan, buat perubahan di kumpulan aplikasi


sumber
3

Saya punya masalah lain yang menyebabkan masalah ini.

  • Saya telah memastikan kolam aplikasi saya menjalankan .net 4 dalam mode terintegrasi
  • Saya telah menjalankan aspnet_regiis.exe -i
  • Saya telah memeriksa izin folder yang ditetapkan dengan benar untuk akun yang menjalankan kumpulan aplikasi saya

Tidak ada yang berhasil. Ternyata di web.config saya di bawah system.webserver> modules saya memiliki yang berikut:

<remove name="WindowsAuthentication" />

Jelas ini menghapus modul otentikasi windows yang tampaknya entah bagaimana merobohkan semuanya.

Saya harap ini membantu seseorang, karena ini menghabiskan sebagian besar malam saya!

Paul Suart
sumber
3

UI agak berbeda di versi Windows Server yang lebih baru. Di sinilah Anda harus mengaktifkan ASP.Net untuk membuatnya berfungsi pada IIS

Perbaiki IIS & Asp.net

Matthew Zourelias
sumber
2

Menambahkan solusi lain untuk masalah ini.

dalam file Global.asax.cs saya, saya telah menonaktifkan file php yang dicoba untuk dikonsumsi oleh pipa MVC menggunakan yang berikut:

routes.IgnoreRoute( "{*php}" );

Saya telah melakukan ini sebelumnya dalam proyek MVC2 dan itu bekerja dengan baik, tetapi melakukan ini di aplikasi MVC 3 saya menyebabkan masalah yang dilaporkan di atas.

TheRightChoyce
sumber
2

Namun alasan lain ini bisa terjadi - Anda RouteConfig.csatauWebApiConfig.cs tidak valid.

Dalam kasus saya, saya memiliki rute yang ditentukan (perhatikan tanda kurung alih-alih kurung kurawal):

...
routeTemplate: "api/(something}"
...
Terry
sumber
Ini bekerja untuk saya! Jika saya berubah routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Ketika saya tetap id = UrlParameter.Optionaldi repositoryId = UrlParameter.Optionalitu mulai bekerja!
Dmitresky
2

Harap dicatat untuk pengguna Windows 8 Anda perlu menambah / menghapus komponen windows dan menghapus versi .net reboot lalu menginstal ulang untuk mendaftarkannya dengan IIS. Saya kira ini terjadi jika Anda mendapatkan .net 4.5 dari visual studio dan menginstal IIS sesudahnya.

Lee. Musim Dingin
sumber
2

Seaneh mungkin, menginstal ulang IIS adalah apa yang berhasil bagi saya, dengan perintah berikut dijalankan dari dalam folder versi .net:

aspnet_regiis.exe /i

masukkan deskripsi gambar di sini

Ketika saya pertama kali menjalankan perintah ini, saya mulai mendapatkan Kesalahan HTTP 403.14. Tapi begitu saya menjalankan perintah lagi itu memecahkan masalah.

Obs : Hal lain yang juga saya lakukan adalah menghapus HTTP Redirect dari fitur server di layar Server Management sebelum menginstal ulang IIS. Mungkin ini juga berdampak dalam menyelesaikan masalah, tetapi saya tidak yakin. Jadi, jika menginstal ulang IIS masih tidak berhasil, coba hapus HTTP Redirect dan coba lagi. Semoga ini bisa bekerja untuk Anda juga.

Ulysses Alves
sumber
FYI aspnet_regiis.exetidak menginstal atau menginstal ulang IIS, itu hanya mendaftar versi NET framework tertentu, sehingga dapat digunakan oleh IIS untuk aplikasi hosting.
stephen
1

Untuk mengatasi masalah ini tanpa harus beralih ke mode 32 bit Anda harus memperbarui kode sumber untuk proyek ini

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

Saya telah mengangkat masalah ini sebagai diskusi di papan diskusi di proyek cloud codeplex IT.

http://itcloud.codeplex.com/discussions/262000

Omar
sumber
1

Ini bekerja untuk saya dan mungkin berguna untuk yang lain.

Mungkin semua komponen yang diperlukan tidak ada atau / dan tidak semua terdaftar dengan benar. Untuk mengatasi ini, coba hapus centang pada semua opsi di dalam Panel Kontrol -> Aktifkan atau nonaktifkan fitur Windows -> Layanan Informasi Internet -> Layanan World Wide Web -> Fitur Pengembangan Aplikasi, hapus centang semua opsi dan periksa kembali semua kemudian reset IIS dan periksa apakah masalah telah terpecahkan.

masukkan deskripsi gambar di sini

MirlvsMaximvs
sumber
1

Jika Anda menjalankan IIS 8.5 di Windows 8, atau Server 2012, Anda mungkin menemukan bahwa menjalankan mvc 4/5 (.net 4.5) tidak berfungsi di direktori virtual. Jika Anda membuat entri host lokal di file host untuk menunjuk kembali ke mesin lokal Anda dan kemudian arahkan situs web IIS lokal baru ke folder itu (dengan entri header host yang cocok) Anda akan menemukannya berfungsi kemudian.

Mastro
sumber
0

Saya membuat namespace baru (dan karenanya folder) identik dengan rute ke controller (misalnya MvcApp/Test/SomeClasses.csdan MvcApp/Controllers/TestController.cs). Ini menghasilkan juga 403,14!

Papa Mufflon
sumber
0

Bagi saya, solusinya adalah menambahkan paket NuGet Microsoft.AspNet.WebPages (ditambah dependensi Razor dan Infrastruktur) ke proyek web saya.

Infrastruktur harus diinstal ulang secara paksa karena tidak ditambahkan sebagai referensi pada awalnya.

Mathieu Diepman
sumber
0

Dalam kasus saya. NET CRL Version di Application pool prppertires diatur ke Tidak ada kode yang dikelola (tidak tahu mengapa). Mengaturnya ke .NET CRL Version v4.0.30319 memecahkan masalah.

Eugene Rozhkov
sumber