【问题标题】:405 Method Not Allowed in NuGet PushNuGet 推送中不允许使用 405 方法
【发布时间】:2013-05-03 07:17:21
【问题描述】:

当我尝试推送时,我的 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 不会为您提供完整的详细信息。

标签: push nuget nuget-server


【解决方案1】:

在解决这个问题几个小时后,我找到了问题。

当您在 NuGet 服务器中列出包时,您指向 http://nugetserver.com/nuget。但是,当您尝试 PUSH 或 DELETE 包时,您需要指向 http://nugetserver.com,路径中没有 nuget 文件夹。

发生的情况是 NuGet.exe 将 /api/v2/package 附加到 URL 将其变成 http://nugetserver.com/api/v2/package

我认为这远非最佳,因为它会让您向 nuget.exe.config 添加两个不同的源:一个用于获取/列表,另一个用于推送/删除包。

【讨论】:

  • 我将提要托管在我的本地开发服务器中。如果我只使用不带 /nuget 的 url,它会抛出错误: 404 (Not Found) 。我已经完成了删除 webdev、添加权限等的所有工作,但仍然给我错误。
  • 这有改变吗?我刚刚更新了旧的 NuGet 服务器,现在它失败了,除非额外的 /nuget 也添加到推送源中。 (在更新之前,额外的/nuget 不允许在推送源中。)
【解决方案2】:

除了使用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

【讨论】:

  • 还要确保 IIS 用户对 Packages 文件夹具有写入权限
  • 作为修改 web.config 的替代方法,您可以在 IIS 中、服务器级别、站点级别甚至应用程序级别删除 WebDAVModule。在 IIS 管理器中,单击树中的服务器(或站点),然后打开模块(在 IIS 下),在列表底部附近找到 WebDAVModule,然后将其删除。
  • 这对我也有帮助。谢谢!
  • 把这个放在哪里?
【解决方案3】:

我遇到了同样的错误 - 在我的情况下,我的 NuGet 环境变量指向旧的 v2 版本的 NuGet,而我试图推送到 v3 提要。

将我的环境变量重新指向 v3 NuGet.exe 修复了它。

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      对我的修复是在 IIS 中。 我禁用了 Windows 身份验证并启用了匿名身份验证。

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

      【讨论】:

      • 这与上述答案之一的建议相反。
      【解决方案6】:

      我正在运行 3.1.2 版。在与这个问题斗争了一段时间后,以下为我做了:

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

      【讨论】:

        【解决方案7】:

        我的解决方案是使用最新的 Nuget.exe [3.5.0],由于某种奇怪的原因,我有旧的 NuGet.exe(2.8.5 [2017 版]),它因 405 错误而失败。希望这对某人有所帮助。

        【讨论】:

        • 我使用的是 Visual Studio 2019。如何知道我使用的是哪个版本的 Nuget.exe?
        【解决方案8】:

        如果您有 IIS 8.0,WebDAV 发布方法不允许 nuget Push。从 IIS 卸载它,一切正常 WebDAV uninstall

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 2011-09-01
          • 2012-06-29
          相关资源
          最近更新 更多