2013-05-08 185 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修复了它。

愚蠢的错误,但希望这可能会节省一些人一些时间。