2013-05-08 41 views
28

Máy chủ NuGet của tôi đang ném 405 Không được phép khi tôi cố gắng đẩy. Ít nhất, đó là những gì NuGet console nói:405 Phương pháp không được phép trong NuGet Push

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

Nhưng khi tôi nhìn vào phản ứng HTTP thực tế với Fiddler vấn đề có vẻ là hoàn toàn khác nhau:

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

Bất kỳ ý tưởng về những gì có thể xảy ra ?

Cảm ơn!

+0

Nếu bạn đến đây và đang xem xét vấn đề này, hãy đảm bảo bạn làm như OP và kiểm tra phản hồi HTTP, không phải tất cả 405 đều giống nhau và NuGet không cung cấp đầy đủ chi tiết cho bạn. – Liam

Trả lời

44

Sau vài giờ làm việc về vấn đề này, tôi đã có thể tìm ra sự cố.

Khi bạn DANH SÁCH gói trong máy chủ NuGet, bạn trỏ đến http://nugetserver.com/nuget. Tuy nhiên, khi bạn đang cố gắng PUSH hoặc DELETE một gói, bạn cần trỏ đến http://nugetserver.com mà không có thư mục nuget trong đường dẫn.

gì xảy ra là NuGet.exe thêm /api/v2/gói đến URL biến nó thành http://nugetserver.com/api/v2/gói

Tôi nghĩ rằng đây là xa tối ưu vì nó làm cho bạn thêm hai nguồn khác nhau cho nuget.exe.config của bạn: một cho get/list và một cho việc đẩy/xóa các gói.

+0

Điều này đã thay đổi, vì vậy url nguồn cấp dữ liệu "https://www.nuget.org" sẽ hoạt động ngay bây giờ. –

+0

Tôi đang lưu trữ nguồn cấp dữ liệu trong máy chủ dev cục bộ của mình. Nếu tôi chỉ sử dụng url mà không có/nuget nó ném lỗi: 404 (Not Found). Tôi đã làm tất cả từ việc loại bỏ webdev, thêm quyền vv nhưng vẫn cho tôi lỗi. – aman

+0

Điều này có thay đổi không? Tôi vừa cập nhật một NuGet Server cũ và bây giờ nó không thành công trừ khi '/ nuget' bổ sung được thêm vào nguồn push. (Trước khi cập nhật, phần bổ sung '/ nuget' không được phép ở trong nguồn push.) – Peter

49

Ngoài việc sử dụng nuget push -Source http://nugetserver.com, tôi đã làm điều này:

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

Nguồn: Nuget issue #1789

+5

Cũng đảm bảo rằng người dùng IIS có quyền ghi vào thư mục Gói – juanagui

+5

+1 cho số lần câu trả lời cụ thể này khắc phục được sự cố. –

+5

Là một thay thế để sửa đổi web.config, bạn có thể loại bỏ WebDAVModule trong IIS, ở cấp độ máy chủ, cấp trang web hoặc thậm chí cấp ứng dụng. Trong IIS Manager, bấm vào máy chủ trong cây (hoặc trang web), sau đó mở Mô-đun (trong IIS), tìm WebDAVModule gần cuối danh sách, sau đó loại bỏ nó. – biscuit314

0

Việc sửa chữa đối với tôi là trong IIS. Tôi đã tắt xác thực cửa sổ và bật xác thực ẩn danh.

Tôi đã chuyển sang máy chủ nuget của riêng mình.

1

giải pháp đối với tôi - chạy IIS địa phương trên Win 8.1 máy tính -
là để cho phép "Windows xác thực" và "ASP.NET Mạo danh"

2

tôi đã có lỗi tương tự - trong trường hợp của tôi, tôi Biến môi trường NuGet đã trỏ đến một phiên bản cũ của NuGet v2, và tôi đã cố gắng đẩy vào một nguồn cấp dữ liệu v3.

Thay đổi biến môi trường của tôi thành v3 NuGet.exe đã sửa nó.

Lỗi ngớ ngẩn, nhưng hy vọng có thể tiết kiệm thời gian cho ai đó.