NuGet Push中的405方法不允许。

32

当我尝试推送时,我的NuGet服务器会抛出405 Not Allowed错误。至少,这是NuGet控制台所显示的:

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

但是当我用 Fiddler 查看实际的 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>

有什么想法可能正在发生?

谢谢!


如果你到这里看这个问题,请确保像 OP 一样检查 HTTP 响应,不是所有的 405 都相同,而 NuGet 没有提供给你完整的细节。 - Liam
8个回答

57

经过几个小时的问题排查,我终于找到了问题所在。

当你在NuGet服务器上列出软件包时,指向的是http://nugetserver.com/nuget。但是,当你尝试PUSH或DELETE软件包时,需要将路径中的nuget文件夹删除,指向的是http://nugetserver.com

NuGet.exe会将/api/v2/package附加到URL上,使其变成http://nugetserver.com/api/v2/package

我认为这远非最佳选择,因为它会让你在nuget.exe.config中添加两个不同的源:一个用于获取/列出软件包,另一个用于推送/删除软件包。


我正在本地开发服务器上托管该源。如果我只使用URL而不带“/nuget”,它会抛出错误:404(未找到)。我已经尝试了所有方法,包括删除WebDev、添加权限等,但仍然出现错误。 - aman
这个有变化吗?我刚刚更新了一个旧的NuGet服务器,现在除非在推送源中添加额外的/nuget,否则它将失败。(在更新之前,不允许在推送源中添加额外的/nuget。) - Peter

54

除了使用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问题#1789


7
请确保IIS用户对“Packages”文件夹具有写入权限。 - juanagui
5
除了修改 web.config 文件,你还可以在 IIS(Internet Information Services)上删除 WebDAVModule。这可以在服务器级别、站点级别或甚至应用程序级别进行。在 IIS 管理器中,单击树形菜单中的服务器(或站点),然后打开“模块”(在 IIS 下),找到列表底部附近的 WebDAVModule 并将其移除即可。 - biscuit314
这也帮助了我。谢谢! - DolceVita
放在哪里? - tnk479

4

我也遇到了同样的错误 - 在我的情况下,我的NuGet环境变量指向了一个旧的v2版本的NuGet,并且我试图推送到v3 feed。

将我的环境变量重新指向v3 NuGet.exe就解决了问题。

这是一个愚蠢的错误,但希望这可以节省其他人的时间。


1
对我来说,解决方案是在Win 8.1计算机上运行本地IIS,启用“Windows身份验证”和“ASP.NET模拟”。

0
我的解决方法是在IIS中进行的。 我禁用了Windows身份验证并启用了匿名身份验证。
我正在推送到自己的NuGet服务器。

这与上面一个答案所暗示的相反。 - tnk479

0

如果您使用的是IIS 8.0,WebDAV发布方法不允许NuGet Push。请从IIS中卸载它,然后问题就会得到解决 卸载WebDAV


0
我的解决方案是使用最新的Nuget.exe [3.5.0],由于某种奇怪的原因,我使用了旧版NuGet.exe(2.8.5 [2017版本]),导致出现405错误。希望这能帮助到其他人。

我正在使用Visual Studio 2019。我该如何确定我正在使用哪个版本的Nuget.exe? - tnk479

0

我正在运行版本3.1.2。在与这个问题搏斗了一段时间后,以下方法对我起到了作用:

  • 给服务器上的Packages文件夹赋予写权限
  • 因为我已经删除了Packages文件夹中的先前包,所以我还必须删除Packages文件夹中的“*.cache.bin”文件。
  • 运行命令为"nuget.exe push {package file} {apikey} -Source {ipaddress:port}/nuget" 注意末尾的"/nuget"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接