Błąd HTTP MVC4 403.14 - zabroniony


88

Zbudowałem aplikację internetową .net4.5 ASP.NET MVC4, która działa dobrze lokalnie (IIS Express i serwer deweloperski), ale po wdrożeniu jej na moim serwerze sieciowym generuje błąd 403. Zainstalowałem .Net 4.5RC na serwerze i nawet wypróbowałem aspnet_regiis -i bit, który wszyscy zalecali w przypadku problemów z poprzednimi wersjami MVC / .Net, ale to nie pomogło.

Jakieś pomysły?

EDYCJA : Więcej informacji o sytuacji. Serwer jest 32-bitowy i mam 4 inne aplikacje MVC3, które działają dobrze. To tylko moja aplikacja MVC4, która nie działa.


Napotkałem ten sam problem podczas tworzenia nowej aplikacji formularzy sieci Web asp.net 4.5 . Działało dobrze lokalnie (IIS 7.5), ale po wdrożeniu na serwerze testowym (także IIS 7.5) większość moich dołączonych i zminimalizowanych plików javascript i css nie ładowała się z błędem 404 Not Found. Poniższa odpowiedź na temat runAllManagedModulesForAllRequests rozwiązała problem za mnie!
ClearCloud8

Być może odpowiedziałem na to pytanie pod adresem: stackoverflow.com/questions/24343788/…
fsbf

<system.webServer> <moduły runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Jinto John Kwietnia

Odpowiedzi:


172

Próbować

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

Przez

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website


1
Miałem to na miejscu, zrobiłem wszystko, a nadal działają tylko witryny MVC 4. Aby to zadziałało, musi istnieć jakaś inna sztuczka.
Maxim V. Pavlov

1
To. Wypróbowałem wszystkie inne standardowe rozwiązania bez radości, ale to był ten, który rozwiązał problem.
Julia Hayward

1
Drogi przyjacielu, robię to, ale to nie działa. Naprawdę pracowałem z MVC 4 i VisualStudio 2012, mój projekt działa dobrze do wczoraj, ale po kilku zwykłych zmianach w moich kodach ten błąd rośnie na domyślnej stronie (strona główna / indeks). czy jakieś ciało może mi pomóc, proszę? ..
A.Dara,

4
Ta poprawka nie jest odpowiednia dla tego problemu (zobacz łącze w odpowiedzi Jason Koopmans). znacznie lepiej jest pobrać odpowiednią poprawkę tutaj microsoft.com/en-us/download/ ...
Ahmad Ibrahim

@AhmadIbrahim to w rzeczywistości rozwiązanie problemu. Poprawka dotyczy tylko wersji 64-bitowej, pytanie wyraźnie określa 32-bitową. Istnieją pewne konfiguracje, w których RAMMFAR jest najbardziej niezawodnym działającym rozwiązaniem i zapewnia minimalne obciążenie serwera, jeśli odpowiednio używane są sieci CDN.
MarkKGreenway

22

Błąd 403,14 to kod błędu HTTP dotyczący braku zezwolenia na wyświetlenie zawartości katalogu. Upewnij się, że

  1. Witryna internetowa została skonfigurowana jako aplikacja w usługach IIS
  2. Masz .NET 4.5 zainstalowany na serwerze
  3. Pula aplikacji została ustawiona do uruchamiania odpowiedniej wersji środowiska .NET Framework (tzn. Nie jest ustawiona na .NET 2.0
  4. Używasz zintegrowanego potoku w puli aplikacji
  5. .NET 4.5 jest faktycznie zarejestrowany w usługach IIS. Zobacz ten post, aby zapoznać się z podobnym problemem / rozwiązaniem

Zwykle a i d są największymi problemami dotyczącymi wdrożeń MVC w usługach IIS


1. Nie skonfigurowałem witryny jako aplikacji. 2. Mam zainstalowany .net 4.5, 3. miałem pulę aplikacji przeznaczoną dla poprawnej platformy. 4. Mój basen był ustawiony na klasyczny, zmieniłem go na zintegrowany, ale nic to nie pomogło. 5. Jestem pewien, że 4.5 jest zarejestrowany.
mithun_daa,

1
@mithun_daa - Jeśli nie masz konfigurację witryny, jak aplikacji, jej całkiem proste -> kliknij prawym przyciskiem myszy wirtualny katalog / stronie i przekonwertować na aplikację (lub dodać aplikację, terminologia ucieka mi w tej chwili)
Tommy

Czy to jest rzecz specyficzna dla MVC4? Ponieważ nigdy nie konfigurowałem moich projektów MVC3 jako aplikacji i działają dobrze.
mithun_daa,

Może to być sposób wdrażania -> ale każda aplikacja internetowa .NET musi być ustawiona jako aplikacja w usługach IIS. Jeśli jednak umieszczasz je tylko w domyślnej witrynie internetowej, to działa ona w domyślnej aplikacji internetowej. Upewnij się, że pula aplikacji domyślnej witryny sieci Web jest poprawnie skonfigurowana (.NET 4 / zintegrowana). Tworząc katalog wirtualny / wirtualną witrynę internetową w usługach IIS, masz również możliwość ustawienia jej własnej aplikacji.
Tommy,

Prawdopodobnie pomyliłem się, ale żadna z witryn nie znajduje się w domyślnej witrynie sieci Web. Klikam prawym przyciskiem myszy „Witryny” w IIS7 i wybieram „Dodaj witrynę sieci Web”. Tak właśnie robiłem.
mithun_daa,

11

Być może ... Jeśli zdarzy się, że użyjesz Kreatora publikacji (tak jak ja) i zaznaczysz pole wyboru „Prekompiluj podczas publikowania” (tak jak ja) i zobaczysz te same symptomy ...

Tak, uderzyłem się w głowę, ale po usunięciu zaznaczenia tego pola, pozornie niezwiązanego ze sobą ustawienia, wszystkie opisane objawy ustąpiły po ponownym wdrożeniu.

Mam nadzieję, że to naprawi niektórych ludzi.


Jeśli tak jest, możliwą główną przyczyną jest posiadanie innej wersji biblioteki zewnętrznej w środowisku produkcyjnym. Moja aplikacja MVC została skompilowana z nowszą wersją biblioteki DLL innej firmy i starszą wersją na serwerze produkcyjnym ..
ValGe

Oto cud chłopca, dziecko, cudowny człowiek, fenomen, niepowstrzymany, król, za @Brian Kirkpatrick panie i panowie
Luis Villarroel

10

Windows-> Start -> Włącz i wyłącz funkcje systemu Windows

Upewnij się, że zaznaczyłeś wymagane opcje w

wprowadź opis obrazu tutaj


6

Przed zastosowaniem

runAllManagedModulesForAllRequests="true"/>

rozważ poniższy link, który sugeruje mniej drastyczną alternatywę. W poście autor proponuje następującą zmianę w lokalnym pliku web.config:

  <system.webServer>
    <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html


To jest prawdziwa odpowiedź. Dzięki!
Spivonious

5

Istnieje błąd Refactor -> Rename w programie Visual Studio 2012, który błędnie zmienił nazwę „id” wewnątrz wartości ciągu literału parametru url w moim RouteConfig.cs. Spowodowało to błąd 403,14 w nowej i poprawnej konfiguracji zarówno w systemie Windows Server 2012, jak i Windows Server 2008 R2.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

został zmieniony na

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Dla mnie, odkryłem dawno temu, że mogę wprowadzić nulldla nameparametru, aby uniknąć tworzenia się nazwę dla każdej trasy. Okazuje się, że czasami powoduje to również 403 (tylko w naszym środowisku produkcyjnym, Win Server 2008 R2 z .NET 4.5.1, MVC 5 w projekcie VS2013. Aby rozwiązać problem, dodałem nazwę dla każdej trasy.
tristankoffee

2

Możesz również uzyskać 403, jeśli podczas testowania na serwerze deweloperskim używasz zintegrowanego potoku, a następnie instalujesz jako klasyczny tryb potoku na serwerze sieci Web IIS 7.5 na żywo, brakowało mi również folderu app_data, który również był wymagany


2

Jeśli korzystasz z usług IIS 8.5 w systemie Windows 8 lub Server 2012, może się okazać, że uruchomienie mvc 4/5 (.net 4.5) nie działa w katalogu wirtualnym. Jeśli utworzysz wpis hosta lokalnego w pliku hosta, aby wskazywał z powrotem na komputer lokalny, a następnie wskażesz nową lokalną witrynę sieci Web usług IIS do tego folderu (z pasującym nagłówkiem hosta), okaże się, że wtedy działa.


Po co publikować tę samą odpowiedź w wielu miejscach?
devnull

8
Ponieważ próbowałem znaleźć rozwiązanie, a dotyczy to obu. Uratuj kogoś przed polowaniem w okolicy.
Mastro

Nie powinieneś publikować zduplikowanych odpowiedzi. To wszystko co mogę powiedzieć.
devnull

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

Możesz użyć powyższego kodu


1

Ustawiłem pulę aplikacji nowej aplikacji na DefaultAppPoolw IIS, która oczywiście używa Classicpotoku z .NET v.2.0.

Aby rozwiązać problem, utworzyłem nową pulę aplikacji przy użyciu Integratedpotoku i .NET v4.0. tylko dla tej nowej aplikacji i wszystko zaczęło działać zgodnie z oczekiwaniami.

Nie zapomnij przypisać tej nowej puli aplikacji do aplikacji. Wybierz aplikację w usługach IIS, kliknij, Basic Settingsa następnie wybierz nową pulę aplikacji dla aplikacji.


0

ten, który ostatnio widzę częściej, to IIS i umożliwiający działanie aplikacji 32-bitowych

Czy właśnie tego próbowałeś. w przeciwnym razie potrzebujemy więcej informacji o wersjach serwerów produkcyjnych i deweloperskich


Przepraszam, ale nie postąpiłem zgodnie z tym, co miałeś na myśli. To jest serwer 32-bitowy. Zaktualizowałem swój post, aby dodać więcej informacji.
mithun_daa,

Ahhh ... Czy są w oddzielnych pulach aplikacji?
MarkKGreenway,

Tak, każda z moich witryn ma swoje własne pule aplikacji.
mithun_daa,

0

Mam trochę inny problem, na serwerze 2012 jakoś zapomniałem włączyć asp.net 4.5, więc jeśli masz ten problem, sprawdź dwukrotnie, czy go włączasz.


0

Używam systemu Windows Server 2012 R2 na platformie Azure i ASP.NET 4.5, IIS 8

Rozwiązałem ten problem, odinstalowując wszystkie elementy ASP.NET w programach i funkcjach, a następnie ponownie instalując ASP.NET w ten sposób za pomocą Menedżera serwera za pomocą Dodaj role i funkcje: wybrano instalację opartą na rolach lub funkcjach, wybrałem mój serwer, a następnie dla opcji Wybierz rolę serwera wybrano serwer sieci Web (IIS) / serwer sieci Web / programowanie aplikacji, a następnie kliknięto ASP.NET 4.5, potwierdzono instalację warunku wstępnego, a następnie ponownie zainstalowano ASP.NET 4.5.

Moje poprzednie wyszukiwania doprowadziły mnie do przekonania, że ​​problem w rzeczywistości wynika z problemu z rejestracją w ASP.NET. We wcześniejszych wersjach programu ASP.NET istnieje narzędzie, które można uruchomić w celu zarejestrowania programu ASP.NET bez ponownej instalacji, ale wydaje się, że nie jest ono już dostępne.


0

Rozwiązuję problem otwierając Visual Studio, rozszerzając referencje i zmieniając właściwość „Copy Local” na „True”.

Odkryłem to, porównując biblioteki DLL ze starej wersji z bibliotekami DLL mojej nowej wersji (to nie działało)


0

W moim przypadku domyślną stroną mojej aplikacji był index.html, którego brakowało w domyślnych opcjach dokumentu. Dodanie go naprawiło błąd 403.14 Zakazany.


0

W moim przypadku problem był spowodowany niestandardowym ActionFilterAttribute, który był rodzajem globalnego atrybutu filtru. Atrybut utworzył wystąpienie usługi za pośrednictwem usługi Autofac, ale usługa uległa awarii w konstruktorze:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}

0

W moim przypadku ani funkcje systemu Windows, ani aspnet_regiis -inie zadziałały. Po godzinach kopania w internecie stworzyłem własne rozwiązanie:

  1. W Menedżerze IIS w modułach zmieniłem dziedziczenie na lokalne w węźle UrlRoutingModule-4.0:

    wprowadź opis obrazu tutaj

  2. W web.config wkleiłem kilka porad z tego forum:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="UrlRoutingModule-4.0"></remove>
            <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add>
        </modules>
    </system.webServer>
    

Mam nadzieję, że to pomoże

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.