1
votes

I use a private NuGet.Server with the newest version 3.1.2. My IIS has the WebDAV feature not installed.   Therefore the other recommendations in how to fix the 405 (method not allowed) error, didn't resolve my issue.

My IIS NuGet app has the anonymous authentication enabled with the system user "IUSR". This user has full rights to the packagePath E:\NuGet\packages

The push command my nuget.server looks like this:

nuget push Mypackage.1.0.0.nupkg -NonInteractive -Source http://srv-dev:8080/SoNuGetHost/ -ApiKey VSTS -Verbosity Detailed

The error part looks like this:

D:>nuget push OneSignal.RestAPIv3.Client.1.0.3.nupkg -NonInteractive -Source http://srv-dev:8080/SoNugetHost/ -ApiKey VSTS -Verbosity Detailed

NuGet Version: 4.6.2.5055

Pushing OneSignal.RestAPIv3.Client.1.0.3.nupkg to 'http://srv-dev:8080/SoNugetHost/'...

PUT http://srv-dev:8080/SoNugetHost/

MethodNotAllowed http://srv-dev:8080/SoNugetHost/ 446ms

below is the 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=\&quot;Web\&quot; /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-->

So... does anyone has any other hints in how to fix this? Thank you

EDIT:

Here is an output of the TraceLogging of the IIS (Version 8.5 on a 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

2 Answers

1
votes

My gosh...

After hours of try and error I found this current PR from the NuGet.Server repo.

The contributor stated, that the old nuget server version 2.8.5xx used the root url and extended automatically api/v2/package to it. But the new version needs nuget as suffix. So I just changed my nuget push command to:

nuget push Mypackage.1.0.0.nupkg -NonInteractive -Source http://srv-dev:8080/SoNuGetHost/nuget -ApiKey VSTS -Verbosity Detailed

Additionally I needed to change the authentication way on the IIS configuration from anonymous authentication to windows authentication.

Therefore I need to changed the ApplicationPool setting from classicMode to integratedMode. (I tried it with anonymous and classicMode, but this did not work)

0
votes

In your web.config you have:

<add key="packagesPath" value="E:\NuGet\Packages" />

Try changing it to

<add key="packagesPath" value="" />

EDIT: Change the verb in following line to *

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