2013-05-08 17 views
28

Mój serwer NuGet rzuca 405 NIE DOPUSZCZAJĄC, gdy próbuję pchnąć. Przynajmniej to jest to co mówi Nuget konsola:405 Metoda niedozwolona w NuGet Push

Failed to process request. 'Method Not Allowed'. 
The remote server returned an error: (405) Method Not Allowed.. 

Ale kiedy patrzę na rzeczywistej odpowiedzi HTTP z Skrzypek problem wydaje się być zupełnie inna:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code></code> 
    <message xml:lang="en-US">The URL representing the root of the service only supports GET requests.</message> 
</error> 

Wszelkie pomysły na to, co może się dziać ?

Dzięki!

+0

Jeśli znajdziesz się tutaj i szukasz tego problemu, upewnij się, że robisz to samo, co OP i sprawdzasz odpowiedź HTTP, nie wszystkie 405 są takie same, a NuGet nie podaje wszystkich szczegółów. – Liam

Odpowiedz

44

Po kilku godzinach pracy nad problemem udało mi się znaleźć problem.

Podczas pakowania LIST w serwerze NuGet wskazuje się na http://nugetserver.com/nuget. Jednak przy próbie PUSH lub USUŃ pakiet należy wskazać na http://nugetserver.com bez folderu nuget w ścieżce.

Co się dzieje, że NuGet.exe dołączyć /API/v2/Pakiet do adresu URL przekształcając go w http://nugetserver.com/API/v2/pakiet

myślę, że to jest dalekie od optymalnego, ponieważ sprawia, że ​​można dodać dwa różne źródła do pliku nuget.exe.config: jeden dla get/list i drugi dla wypychania/usuwania pakietów.

+0

To się zmieniło, więc adres URL kanału "https://www.nuget.org" będzie teraz dostępny. –

+0

Hostuję kanał na moim lokalnym serwerze dev. Jeśli po prostu użyję adresu url bez/nuget, to zgłasza błąd: 404 (nie znaleziono). Zrobiłem wszystko, usuwając webdev, dodając uprawnienia itp., Ale nadal daje mi błąd. – aman

+0

Czy to się zmieniło? Właśnie zaktualizowałem stary serwer NuGet i teraz to się nie powiedzie, chyba że dodatkowe źródło '/ nuget' zostanie dodane do źródła wypychania. (Przed aktualizacją dodatkowe '/ nuget' nie mogło znajdować się w źródle wypychania.) – Peter

49

Oprócz korzystania nuget push -Source http://nugetserver.com, zrobiłem to:

<!--Add the following to the beginning of <system.webServer><modules>:--> 
<remove name="WebDAVModule" /> 
<!--Add the following to the beginning of <system.webServer><handlers>:--> 
<remove name="WebDAV" /> 

Źródło: Nuget issue #1789

+5

Upewnij się również, że użytkownik usług IIS ma uprawnienia do zapisu w folderze Pakiety – juanagui

+5

+1, ponieważ # razy ta konkretna odpowiedź naprawiła problem. –

+5

Jako alternatywa do modyfikowania pliku web.config, można usunąć składnik WebDAVModule w usługach IIS na poziomie serwera, poziomu witryny lub nawet poziomu aplikacji. W Menedżer usług IIS kliknij serwer w drzewie (lub lokacji), a następnie otwórz moduły (w obszarze IIS), znajdź moduł WebDAVModule w dolnej części listy, a następnie usuń go. – biscuit314

0

Rozwiązaniem dla mnie było w IIS. I wyłączono uwierzytelnianie systemu Windows i włączono uwierzytelnianie anonimowe.

Naciskam na mój własny serwer Nuget.

1

rozwiązanie dla mnie - prowadzenie lokalnego IIS na komputerze Win 8.1 -
było umożliwienie „uwierzytelniania systemu Windows” i „ASP.NET personifikacji”

2

Miałem ten sam błąd - w moim przypadku, mój Zmienna środowiskowa NuGet wskazywała na starą wersję NuGeta w wersji 2, a ja próbowałem przejść do kanału v3.

Nałożenie mojej zmiennej środowiskowej na v3 NuGet.exe naprawiło to.

Głupi błąd, ale mam nadzieję, że może kogoś zaoszczędzić trochę czasu.