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.

mithun_daa
źródło
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

MarkKGreenway
źródło
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

Tommy
źródło
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.

Brian Kirkpatrick
źródło
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

Kurkula
źródło
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

Jason Koopmans
źródło
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 }
);
user641770
źródło
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

marcusdev
źródło
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.

Mastro
źródło
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

Jinto John
źródło
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.

Leniel Maccaferri
źródło
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

MarkKGreenway
źródło
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.

Volodymyr Bilyachat
źródło
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.

fsbf
źródło
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)

Wagner
źródł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.

Erik K.
źródło
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!');
    }
}
Artem Vertiy
źródło
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

Sylwia M
źródło