NuGet push версии 3.1.2 возвращает ошибку 405 HTTP (метод не разрешен)
Я использую приватный NuGet.Server с новейшей версией 3.1.2. В моем IIS не установлена функция WebDAV. Поэтому другие рекомендации, как исправить 405 (method not allowed)
ошибка, не решила мою проблему
В приложении IIS NuGet включена анонимная аутентификация с системным пользователем "IUSR". Этот пользователь имеет полные права на packagePath E:\NuGet\packages
Команда push my nuget.server выглядит так:
nuget push Mypackage.1.0.0.nupkg -NonInteractive -Source http://srv-dev:8080/SoNuGetHost/ -ApiKey VSTS -Verbosity Подробно
Часть ошибки выглядит так:
D:> nuget push OneSignal.RestAPIv3.Client.1.0.3.nupkg -NonInteractive -Source http://srv-dev:8080/SoNugetHost/ -ApiKey VSTS -Verbosity Подробно
Версия NuGet: 4.6.2.5055
Отправка OneSignal.RestAPIv3.Client.1.0.3.nupkg в http://srv-dev:8080/SoNugetHost/'...
PUT http://srv-dev:8080/SoNugetHost/
MethodNotAllowed http://srv-dev:8080/SoNugetHost/ 446ms
ниже находится Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.6" />
</system.Web>
-->
<system.web>
<compilation targetFramework="4.6" />
<!-- maxRequestLength is specified in Kb -->
<httpRuntime targetFramework="4.6" maxRequestLength="2147483647" />
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<!-- Depending on IIS configuration, these may have to be added.
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-->
</handlers>
<staticContent>
<mimeMap fileExtension=".nupkg" mimeType="application/zip" />
</staticContent>\
<security><requestFiltering><!-- maxAllowedContentLength is specified in Bytes --><requestLimits maxAllowedContentLength="2147483647" /></requestFiltering></security></system.webServer>
<appSettings>
<!--
Determines if an Api Key is required to push\delete packages from the server.
-->
<add key="requireApiKey" value="true" />
<!--
Set the value here to allow people to push/delete packages from the server.
NOTE: This is a shared key (password) for all users.
-->
<add key="apiKey" value="VSTS" />
<!--
Change the path to the packages folder. Default is ~/Packages.
This can be a virtual or physical path.
-->
<add key="packagesPath" value="E:\NuGet\Packages" />
<!--
Change the name of the internal cache file. Default is machine name (System.Environment.MachineName).
This is the name of the cache file in the packages folder. No paths allowed.
-->
<add key="cacheFileName" value="" />
<!--
Set allowOverrideExistingPackageOnPush to false to mimic NuGet.org's behaviour (do not allow overwriting packages with same id + version).
-->
<add key="allowOverrideExistingPackageOnPush" value="true" />
<!--
Set ignoreSymbolsPackages to true to filter out symbols packages. Since NuGet.Server does not come with a symbol server,
it makes sense to ignore this type of packages. When enabled, files named `.symbols.nupkg` or packages containing a `/src` folder will be ignored.
If you only push .symbols.nupkg packages, set this to false so that packages can be uploaded.
-->
<add key="ignoreSymbolsPackages" value="true" />
<!--
Set enableDelisting to true to enable delist instead of delete as a result of a "nuget delete" command.
- delete: package is deleted from the repository's local filesystem.
- delist:
- "nuget delete": the "hidden" file attribute of the corresponding nupkg on the repository local filesystem is turned on instead of deleting the file.
- "nuget list" skips delisted packages, i.e. those that have the hidden attribute set on their nupkg.
- "nuget install packageid -version version" command will succeed for both listed and delisted packages.
e.g. delisted packages can still be downloaded by clients that explicitly specify their version.
-->
<add key="enableDelisting" value="true" />
<!--
Set enableFrameworkFiltering to true to enable filtering packages by their supported frameworks during search.
-->
<add key="enableFrameworkFiltering" value="false" />
<!--
When running NuGet.Server in a NAT network, ASP.NET may embed the server's internal IP address in the V2 feed.
Uncomment the following configuration entry to enable NAT support.
-->
<!-- <add key="aspnet:UseHostHeaderForRequestUrl" value="true" /> -->
<!--
Set enableFileSystemMonitoring to true (default) to enable file system monitoring (which will update the package cache appropriately on file system changes).
Set it to false to disable file system monitoring.
NOTE: Disabling file system monitoring may result in increased storage capacity requirements as package cache may only be purged by a background job running
on a fixed 1-hour interval.
-->
<add key="enableFileSystemMonitoring" value="true" />
</appSettings>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.7.0.0" newVersion="5.7.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.7.0.0" newVersion="5.7.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Spatial" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.7.0.0" newVersion="5.7.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
<!--ProjectGuid: DE6B2A91-48E9-4ADF-BE86-55AD27F6EB1B-->
Итак... есть ли у кого-нибудь еще советы, как это исправить? Спасибо
РЕДАКТИРОВАТЬ:
Вот выходные данные TraceLogging IIS (Версия 8.5 на Server 2012 R2):
<EventData>
<Data Name="ContextId">{80000457-0002-FC00-B63F-84710C7967BB}</Data>
<Data Name="ModuleName">StaticFileModule</Data>
<Data Name="Notification">128</Data>
<Data Name="HttpStatus">405</Data>
<Data Name="HttpReason">Method Not Allowed</Data>
<Data Name="HttpSubStatus">0</Data>
<Data Name="ErrorCode">2147942401</Data>
<Data Name="ConfigExceptionInfo"></Data>
</EventData>
2 ответа
Боже мой...
После нескольких часов попыток и ошибок я нашел этот текущий PR из репозитория NuGet.Server.
Автор заявил, что старый сервер nuget версии 2.8.5xx использовал корневой URL и автоматически расширялся api/v2/package
к этому. Но новая версия нуждается nuget
как суффикс Так что я просто изменил свой nuget push
команда для:
nuget push Mypackage.1.0.0.nupkg -NonInteractive -Source http://srv-dev:8080/SoNuGetHost/ nuget -ApiKey VSTS -Verbosity Подробно
Кроме того, мне нужно было изменить способ проверки подлинности в конфигурации IIS с анонимной проверки подлинности на проверку подлинности Windows.
Поэтому мне нужно изменить настройку ApplicationPool с classicMode на интегрированный режим. (Я попробовал это с anonymous и classicMode, но это не сработало)
В вашем web.config у вас есть:
<add key="packagesPath" value="E:\NuGet\Packages" />
Попробуйте изменить это на
<add key="packagesPath" value="" />
РЕДАКТИРОВАТЬ: изменить глагол в следующей строке на *
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />