2013-05-08 186 views
28

當我嘗試推送時,我的NuGet服務器拋出405不允許。至少,那是什麼的NuGet控制檯說:405 NuGet Push中不允許的方法

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

但是,當我看與小提琴手實際的HTTP響應的問題似乎是完全不同的:在什麼可能會在

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

任何想法?

謝謝!

+0

如果你在這裏看到這個問題,確保你按照OP的要求來做,並且檢查HTTP響應,但並不是所有的405都是一樣的,NuGet也不會給你完整的細節。 – Liam 2017-12-07 14:19:09

回答

44

經過幾個小時的工作後,我發現問題。

當您在NuGet服務器上的LIST軟件包指向http://nugetserver.com/nuget。但是,當您嘗試按下PUSH或DELETE包時,您需要指向http://nugetserver.com而不包含路徑中的nuget文件夾。

什麼情況是,NuGet.exe /API/V2 /包添加到URL,把它變成http://nugetserver.com/API/V2 /包

我認爲這是遠遠沒有達到最佳,因爲它讓你添加您的nuget.exe.config有兩個不同的來源:一個用於get/list,另一個用於推送/刪除軟件包。

+0

這已更改,因此「https://www.nuget.org」供稿網址現在可以完成。 – 2014-10-07 08:41:11

+0

我在我的本地開發服務器託管飼料。如果我只使用沒有/ nuget的url,它會拋出錯誤:404(Not Found)。我已經做了所有從刪除webdev,添加權限等,但仍然給我錯誤。 – aman 2018-01-24 19:54:33

+0

這個改變了嗎?我只更新了一箇舊的NuGet服務器,現在它失敗了,除非額外的'/ nuget'被添加到推送源。 (在更新之前,額外的'/ nuget'不允許在推送源中。) – Peter 2018-02-05 10:28:57

49

除了使用nuget push -Source http://nugetserver.com,我這樣做:

<!--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" /> 

來源:Nuget issue #1789

+5

也請確保IIS用戶對Packages文件夾 – juanagui 2013-08-07 17:59:06

+5

+1擁有寫入權限,以便此特定答案解決問題的次數。 – 2014-10-31 20:46:28

+5

作爲修改web.config的替代方法,您可以在IIS,服務器級別,站點級別甚至應用程序級別中刪除WebDAVModule。在IIS管理器中,單擊樹(或站點)中的服務器,然後打開模塊(在IIS下),在列表底部附近找到WebDAVModule,然後將其刪除。 – biscuit314 2014-12-03 15:31:22

0

對我來說,固定在IIS。 我禁用了Windows身份驗證並啓用了匿名身份驗證。

我正在推送到我自己的nuget服務器。

1

對我的解決方案 - 一個雙贏8.1計算機上運行的本地IIS -
是使「Windows身份驗證」和「ASP.NET模擬」

2

我有同樣的錯誤 - 在我的情況,我NuGet環境變量指向NuGet的舊版本v2,並且我試圖推送到v3 feed。

將我的環境變量重新指向v3 NuGet.exe修復了它。

愚蠢的錯誤,但希望這可能會節省一些人一些時間。