IIS 7.5 üzerinde ASP.NET MVC


338

Visual Studio 2010 RC kullanarak Windows 7 Ultimate (64 bit) kullanıyorum. Geçenlerde VS uygulamaları ile birlikte dev sunucu yerine IIS üzerinde çalıştırmak / hata ayıklama karar verdi.

Ancak, bir MVC uygulaması çalıştırmaya çalıştığımda, aşağıdaki hatayı alıyorum:

HTTP Hatası 403.14 - Yasak Web sunucusu, bu dizinin içeriğini listelemeyecek şekilde yapılandırıldı. Detaylı

Hata Bilgileri

Modül DiziniListeModülü

Bildirim ExecuteRequestHandler

İşleyici StaticFile Hatası

Kod 0x00000000 İstendi

URL http: // localhost: 80 / mySite /

Fiziksel Yol C: \ Projem \ Sitem \

Oturum Açma Yöntemi Anonim Oturum Açma

Anonim Kullanıcı

default.aspxDizine bir dosya yerleştirdim ve aşağıdaki hatayı aldım:

500.21 HTTP Hatası - Dahili Sunucu Hata İşleyicisi "PageHandlerFactory-Integrated" modül listesinde hatalı "ManagedPipelineHandler" modülü var

Bunun işe yaraması için atmam gereken başka adımlar var mı?

Notlar: VS 2010 RC'yi yükledikten sonra IIS 7.5'i yükledim. Visual Studio 2010 MVC projenin "Özellikler" "Web" sekmesi altında yerleşik "Sanal dizin oluştur" düğmesini kullandım. Uygulamanın ASP.NET 4 App Pool kullandığından emin olun.

Aşağıda, sahip olduğum IIS'nin yüklü özellikleri bulunmaktadır.

alternatif metin


Tamam, benzer bir sorun var ve sadece ASP.NET MVC 3 web siteleri ile ortaya çıkıyor. ASP.NET MVC 2 web siteleri iyi çalışıyor. Web sitesinin kök dizinine bir Default.aspx dosyası yerleştirdim ve sorun değil, tamam aldı. VS2010 SP1 ve hala sevinç yok kullanarak ASP.NET MVC 3 web sitesi bin dağıtık var. Ben bununla bitiyorum.
Umar Farooq Khawaja

5
Aynı sorunu yaşıyorum. Uygulamayı entegre 4.0 kullanacak şekilde ayarladım, .NET'i IIS'ye (7.5) kaydetmek için kayıt komutunu çalıştırdım ve hala bu hatayı alıyorum.
Collin White

2
Sonunda dosyayı yeniden adlandırıldı olduğuydu benim sette kadar sorunu bulabildim _Layout.cshtmliçin _PageLayout.cshtmlve karşılık gelen değişiklik yapmıştı _ViewStart.cshtmlyeterli olmadığını görünüşte sıra ama. Adı bir kez geri döndürdüğümde _Layout.cshtmlçalışmaya başladı. Kafa karıştırıcı olan _PageLayout.cshtmlşey, Win7 32 bitinde doğru bir şekilde alındı, ancak Win7 64 bit veya WinSvr2K8 R2'de alınamadı.
Umar Farooq Khawaja

3
IIS 8 yüklü Windows 8'de bu sorunu çözen oldu mu?
Eric Z Beard

3
Windows Server 2012 veya pencere 8 üzerindeyseniz şunu görün: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Yanıtlar:


499

ASP.NET 4, IIS'ye kaydedilmedi. Komut satırında / run aşağıdaki komutu çalıştırmak zorunda kaldı

32bit (x86) Windows

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

64 bit (x64) Windows

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

David Murdoch'un yorumundan not:

Bu Yanıt gönderildikten sonra .net sürümünün değişmiş olması. Çerçevenin hangi sürümünün% windir% \ Microsoft.NET \ Framework64 dizininde olduğunu kontrol edin ve çalıştırmadan önce komutu uygun şekilde değiştirin (şu anda v4.0.30319'dur)


9
64-bit Windows için Framework64'teki "64" e dikkat edin ! beni * ss'de ısırdı. 32 bit sürümünü 4 veya 5 kez hiçbir etki yaratmadan kurmuş olmalıyım.
Ben Lesh

14
Bu Yanıt gönderildikten sonra .net sürümünün değişmiş olması. Çerçevenin hangi sürümünün %windir%\Microsoft.NET\Framework64dizinde olduğunu kontrol edin ve çalıştırmadan önce komutu uygun şekilde değiştirin (şu anda v4.0.30319'dur).
David Murdoch

1
@ bit'e eklemek için 64 bitiniz varsa ve 32 bit aspnet_regiis.exe'yi çalıştırırsanız, size seçenekleri yeniden gösterebilir ve hiçbir şey yapamazsınız
xster

3
Aspnet_regiis.exe komutu .net framework klasöründen eksikse, .net framework installer tam
sürümünü indirin

11
"Bu seçenek işletim sisteminin bu sürümünde desteklenmez. Yöneticiler bunun yerine" Windows Özelliklerini Aç / Kapat "kullanarak ASP.NET 4.5'i IIS8 ile yüklemeli / kaldırmalıdır. iletişim kutusu, Sunucu Yöneticisi yönetim aracı veya dism.exe komut satırı aracı. Daha fazla bilgi için lütfen go.microsoft.com/fwlink/?LinkID=216771 adresine bakın . "
Mastro

199

Sahip olduğunuzdan emin olmanız gereken bir şey daha web.config dosyasında aşağıdaki settir:

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

23
Bunu benim için yaptı. Teşekkürler
boca

5
Benim için de çözdü. Garip, bu ayar olmadan VS2010 IIS Express'te yerel olarak çalışır.
Phil

8
Ayarlamak istemiyorsanız runAllManagedModulesForAllRequests(statik dosyalar için bile çalışır) bir Microsoft düzeltmesi yükleyebilirsiniz: microsoft.com/download/en/… .
Justin Helgerson

10
Yönlendirme modülünü ekleyerek bundan kaçınmaya çalışın: britishdeveloper.co.uk/2010/06/…
Chris Herring

VS2013 kullanıyorsanız ve IIS 7.5 üzerinde çalışmaya çalışıyorsanız - bunu eklemeniz gerekir
KenL

77

Web.config dosyasında aşağıdaki ayarların bulunduğundan emin olun:

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

Daha iyi çözüm:

Yukarıdaki çözüm kesinlikle iyi çalışıyor olsa da , tüm kayıtlı HTTP modüllerinizi her istekte (.jpg .gif .css .html .pdf vb. Her istekte bile) çalıştırdığı ve açıkça kaynak kaybı olduğu için başka bir soruna neden olabilir. Yerine

<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>

PreCondition özniteliğinin boş olduğundan emin olun, tüm isteklerde çalışacağı anlamına gelir. [Daha fazla bilgi edinin] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Orijinal yayını oku")


6
Bu, 403.14'ü kökümde ve 404'ü MVC uygulamam için diğer denetleyici yöntemlerinde düzeltti. Yine de burada aynı şey üzerinde aynı görünür site ayarları ile çalışan başka bir uygulama var ve bu ayar olmadan çalışır, çünkü burada hala balık bir şey var. Bu, VS 2012'nin izniyle bir SPA proje şablonu tarafından oluşturulan, kutumda iyi çalışan ancak yayınlandığında değil bir web.config.
shannon

4
Benim geliştirme cihazı içerdiği yüzden Evet <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, içinde Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configve baktım benim VS 2012 yüklemesi tarihinde değiştirilmiş gibi. Bir sonraki soru, diğer projemde çalışmasına izin veren nedir?
shannon

Görünüşe göre %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irgeliştirme cihazımda var olan varsayılanları ayarlayan en iyi çözüm tarafından önerilmediğini unutmayın . UrlRoutingModule başvurusunu kaldırdığımda bu komut benim için sorunu çözmüyor.
shannon

ASP.NET MVC 5 için Windows Server 2008 R2 IIS 7 üzerinde çalışır.
Ervi B

42

Birinin bu hatayı almasının başka bir nedeni, Global.asax dosyası artık kök klasöründe değilse.


4
Evet - yazdığım yükleyici bu dosyayı getirmedi. Teşekkürler!
zadam

4
Bu da benim sorunumdu. Uygulamamın Global.asax'ın eksik olduğu 403 belirtisine dayanarak asla tahmin
edemezdim

3
Ayrıca benim için düzeltildi: yayınlama seçeneklerinde ön derleme kapatıldı ( global.asaxsadece dosyadan etkilenir).
Richard

1
Bu benim için hile yaptı. Mesele şu ki, benim için ve diğer birçokları için duyuyorum, global.asax her yayınladığımda DİĞER üretiliyor. Her seferinde bunu üretmenin bir yolu var mı?
Greg Z.

Teşekkürler, sorunlarımı düzelttim. Uygulama ASP.NET MVC 4.0, Framework 4.0 üzerinde çalışır. Arvixe'de barındırılıyor.
Joe King

20

Ayrıca bu hatayı alıyordum ve "HTTP Yeniden Yönlendirme" nin Windows Server'da açık olmadığını keşfettim. Bu blog gönderisi bunu da işaret ediyor: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx


6
Olabilecek tüm lanet şeylerden bu kadar. Her yere baktım ve birkaç saat boyunca güvenlik ayarları ile oynadım, aspnet_regiis ve. Tatlı bebek İsa ufalanan bir kaiser rulo üzerinde.
Andrew Backer

Bunun için bir gün geçirdim. Çok teşekkür ederim.
Pradeep

Windows 8 için, HTTP Yeniden Yönlendirmeyi etkinleştirdikten sonra hala hatalar alıyorum. Bunu ikinci bir adım olarak yapmak zorunda
kaldık

İkinci durak sorunumu çözdü. Bazı makineler onsuz çalışır, ancak diğerleri önemlidir. Teşekkürler.
Alexis Heijmeijer

15

Tatlı İsa. Yukarıdaki şeylerin hepsini denedim (ancak ayarlarım aynı bulundu). Sorun yaşıyorsanız başka bir çözüm de:

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

Sisteminiz için bu KB'yi yüklemeyi deneyin. 404'leri görüyorsanız, bunun nedeni bu güncellemenin olmaması olabilir - ve isapi modülü bulunmaz ve bu olmadan bu konuda yapabileceğiniz çok şey yoktur!


1
Server 2008 SP2 (R2 değil) çalıştıran 32 bit bir sunucuda çözüldü
Simon C


7

Benim için bir Asp.Net MVC 5 uygulaması (bin dağıtılmış MVC 5) ile bir Azure Server 2012 R2 IIS 8.5 VM üzerinde Ben zaten 4.5 yüklü olmasına rağmen yükseltilmiş bir cmd isteminden aşağıdakileri yapmak zorunda kaldı:

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

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

Ayrıca tüm IIS özelliklerini aşağıdaki PowerShell ile yükledim:

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

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

Şimdi benim app çalışıyor.


'Dism' benim için çalıştı (önerilen diğer değişikliklerin hiçbirini uygulamadan). Tüm 'üst' özelliklerin de yüklendiğinden emin olmak için '/ all' anahtarını sonuna kadar değiştirmek zorunda kaldım.
Jeroen Ritmeijer

Bu benim için çalıştı. MVC 5'in Windows Server 2012'de .NET 4.5 ile çalıştırılması. IIS varsayılan olarak .NET 4.5'i yüklemez.
DPac

6

Yeni bir sunucuya taşınan bir MVC uygulamamız vardı. .NET 4 ve MVC 3 kuruldu, ancak yine de “Hata 403.14 got. Bu durumda, bu, IIS'nin bir MVC uygulamasıyla uğraştığını anlamadığı, varsayılan sayfayı aradığı anlamına geliyordu.

Çözüm basitti: Sunucuya HTTP Yeniden Yönlendirme yüklenmedi.

Sunucu Yöneticisi - Roller - Web Sunucusu (IIS) - Rol Hizmetleri - HTTP Yeniden Yönlendirme: Yüklü değil. Yükledi, sorun çözüldü.


1
Sunucu Yöneticisi nedir? onu nerede bulabilirim?
Elad Katz

Sunucu Yöneticisi, Yönetimsel Araçlar'da bulunur
udog

5

Ayrıca uygulamanız önceden derlenmişse,

PrecompiledApp.config

uygulamanızın kök klasöründe aksi halde de alabilirsiniz HTTP Error 403.14.


Uygulamam önceden derlenmemiş olsa bile, bir sebepten dolayı orada dosya vardı. Dosya silindi ve şimdi çalışıyor. Teşekkür ederim!
vaindil

Bu cevabı 2 saat harcamadan ve kendi başıma çözmeden önce
görürsem

4

Başka bir olası çözüm, global.asax içinde hareket ederseniz, işaretlemenin doğru MvcApplication sınıfını gösterdiğinden emin olun. Umarım bu gelecekte birini kurtaracaktır.


4

WebDeploy IIS Uzantısını IIS6'dan IIS7.5'e aktarmak için WebDeploy IIS Uzantısını kullandım, bu nedenle tüm IIS ayarları tam olarak üretim ortamında oldukları gibiydi. Burada sağlanan tüm çözümleri denedikten sonra, hiçbiri benim için işe yaramadı, sadece web sitesinin Uygulama Havuzu ayarını Klasik'ten Entegre'ye değiştirmek zorunda kaldım.


4

Aynı 404.14 problemini birdenbire karşıladım. Son olarak sorun, yayınlama profili ayarlarında "yayınlama sırasında önceden derleme" seçeneğinin işaretini kaldırarak giderildi.


Burada aynı. Yayıncılık bugüne kadar sorun değildi - işaretini kaldırmak sorunu çözdü. Yine de garip
Sir Rufo

4

Varsayılan rotanı bir noktada değiştirdim:

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

Kime:

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

Hangi bana hata verdi. Birinin rotadan bahsetmesine sevindim, çünkü muhtemelen bu sonsuza kadar devam ederdim.


4

Benim durumumda ASP.NET 4.5 sunucuda yüklü değil, bu yüzden ASP.NET 4.5'in yüklenmesi sorunu düzeltti.


4

Bu hatayı cmd'yi yönetici olarak çalıştırarak çözebilirsiniz. resim açıklamasını buraya girin

Windows 32 bit için resimdeki ile aynı şeyi yapın

Sadece çerçeve yerine 64 bit olarak framework64 olarak değişiklikler yapın Daha sonra iis'e gidin ve siteyi yenileyin
Eğer u hala bazı hatalar varsa uygulama havuzunda değişiklikler yapın


3

Bu soruna yol açan başka bir sorunum vardı.

  • Uygulama havuzumun .net 4'ü entegre modda çalıştırmasını sağlamıştım
  • Aspnet_regiis.exe -i'yi çalıştırdım
  • Uygulama havuzumu çalıştıran hesap için klasör izinlerinin doğru ayarlandığını kontrol etmiştim

Bunların hiçbiri işe yaramadı. Web.config dosyamda system.webserver> modüllerinin altında aşağıdakilere sahip olduğum ortaya çıktı:

<remove name="WindowsAuthentication" />

Açıkçası bu bir şekilde her şeyi kilter kapalı gibi görünüyordu windows kimlik doğrulama modülü kaldırıldı.

Umarım bu birisine yardımcı olur, çünkü bu bana bir akşamın çoğuna mal oldu!


3

Kullanıcı arabirimi, Windows Server'ın daha yeni sürümlerinde biraz farklıdır. IIS'de çalışmasını sağlamak için ASP.Net'i etkinleştirmeniz gereken yer

IIS ve Asp.net'i düzeltin


2

Bu sorun için başka bir çözüm ekleniyor.

Global.asax.cs dosyasında php dosyalarının aşağıdakileri kullanarak MVC boru hattı tarafından tüketilmesini denedi devre dışı bırakmıştı:

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

Bunları daha önce bir MVC2 projesinde yapmıştım ve iyi çalıştı, ancak MVC 3 uygulamamda bunu yapmak yukarıda bildirilen soruna neden oldu.


2

Bunun başka bir nedeni olabilir - sizin RouteConfig.csveya WebApiConfig.csgeçersiz.

Benim durumumda, böyle tanımlanmış bir rota vardı (kıvırcık parantez yerine parantez not edin):

...
routeTemplate: "api/(something}"
...

Benim için çalışıyor! Değiştiğimde routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Ben sabit zaman id = UrlParameter.Optionalüzerine repositoryId = UrlParameter.Optionalkendisine çalışmaya başlayın!
Dmitresky

2

Windows 8 kullanıcıları için, Windows bileşenlerini eklemeniz / kaldırmanız ve .net yeniden başlatmanın sürümünü kaldırmanız ve IIS'ye kaydetmek için yeniden yüklemeniz gerektiğini lütfen unutmayın. Visual Studio'dan .net 4.5 alırsanız ve daha sonra IIS'yi yüklerseniz bunun olacağını sanırım.


2

Göründüğü kadar garip, IIS'yi yeniden yüklemek benim için işe yaradı ve aşağıdaki komut .net sürüm klasörünün içinden çalıştırıldı:

aspnet_regiis.exe /i

resim açıklamasını buraya girin

Bu komutu ilk çalıştırdığımda, HTTP Hatası 403.14 almaya başladım. Ama bir kez daha komutu çalıştırdım sorunu çözdü.

Gözlem : Yaptığım başka bir şey de IIS'yi yeniden yüklemeden önce HTTP Yönlendirmesini Sunucu Yönetimi ekranındaki sunucu özelliklerinden kaldırmaktı. Belki de sorunun çözülmesinde bir etkisi oldu, ama emin değilim. Bu nedenle, IIS'yi yeniden yüklemek yine de işe yaramazsa, lütfen HTTP Yönlendirmesini kaldırmayı ve tekrar deneyin. Umarım sizin için de işe yarayabilir.


FYI aspnet_regiis.exe, IIS'yi yüklemez veya yeniden yüklemez, yalnızca belirli bir .NET framework sürümünü kaydeder, böylece IIS tarafından uygulamaların barındırılması için kullanılabilir.
stephen

1

32 bit moduna başvurmadan bu sorunu çözmek için, bu projenin kaynak kodunu güncellemeniz gerekecektir.

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)));

Bu sorunu BT bulut kodlama projesinde tartışma panosunda bir tartışma olarak gündeme getirdim.

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


1

Bu benim için çalıştı ve başka biri için yararlı olabilir.

Belki gerekli tüm bileşenler mevcut değildir ve / veya hepsi doğru şekilde kaydedilmemiştir. Bunu çözmek için, Denetim Masası içindeki tüm seçeneklerin işaretini kaldırmayı deneyin -> Windows özelliklerini aç veya kapat -> İnternet Bilgi Servisleri -> World Wide Web Hizmetleri -> Uygulama Geliştirme Özellikleri, tüm seçeneklerin işaretini kaldırın ve tümünü yeniden işaretleyin ve ardından IIS'yi sıfırlayın ve sorunun çözülüp çözülmediğini kontrol edin.

resim açıklamasını buraya girin


1

Windows 8 veya Server 2012'de IIS 8.5 çalıştırıyorsanız, mvc 4/5 (.net 4.5) çalıştırmanın sanal bir dizinde çalışmadığını görebilirsiniz. Ana makinenizde yerel makinenizi işaret edecek şekilde yerel bir ana bilgisayar girdisi oluşturup yeni bir yerel IIS web sitesini bu klasöre (eşleşen ana bilgisayar üstbilgisi girdisiyle) işaret ederseniz, o dosyanın işe yaradığını görürsünüz.


0

Bir denetleyiciye (örn. MvcApp/Test/SomeClasses.csVe MvcApp/Controllers/TestController.cs) giden yolla aynı olan yeni bir ad alanı (ve bu nedenle klasör) oluşturdum . Bu da 403.14 ile sonuçlandı!


0

Benim için çözüm, NuGet paketini Microsoft.AspNet.WebPages (artı Jilet ve Altyapı bağımlılıkları) web projeme eklemekti.

İlk başta referans olarak eklenmediği için altyapının zorla yeniden kurulması gerekiyordu.


0

Benim durumumda, Uygulama havuzu prppertires .NET CRL Sürümü Yönetilen kod yok olarak ayarlandı (neden bilmiyorum). .NET CRL Sürüm v4.0.30319 olarak ayarlamak sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.