403 and 413 errors when publishing to a local Nuget Server

We have an internal Nuget Server we use to manage our software packages. As part of our upgrade to TFS2012 this needed to be moved to a new server VM and I took the chance to upgrade it from 1.7 to 2.1.


The problem


Now we had had a problem that we could publish to the server via a file copy to its underlying Packages folder (a UNC share) but could never publish using the Nuget command e.g.


Nuget push mypackage.nupkg -s http://mynugetserver


I had never had the time to get around to sorting this out until now.


The reported error if I used the URL above was


Failed to process request. ‘Access denied for package ‘Mypackage.’.
The remote server returned an error: (403) Forbidden..


If I changed the URL to


Nuget push mypackage.nupkg -s http://mynugetserver/nuget


The error became


Failed to process request. ‘Request Entity Too Large’.
The remote server returned an error: (413) Request Entity Too Large..


Important: This second error was a red herring, you don’t need the /nuget on the end of the URL


The solution


The solution was actually simple, and in the documentation though it took me a while to find.


I had not specificed an APIKey in the web.config on my server, obvious really my access was blocked as I did not have the shared key. The 413 errors just caused me to waste loads of time looking at WCF packet sizes because I had convinced myself I needed to use the same URL as you enter in Visual Studio > Tools > Option > Package Management > Add Source, which you don’t


Once I had edited my web.config file to add the key (or I could have switched off the requirement as an alternative solution)


  <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=”myapikey” />
    <!–
            Change the path to the packages folder. Default is ~/Packages.
            This can be a virtual or physical path.
        –>
    <add key=”packagesPath” value=”” />
  </appSettings>


I could then publish using


Nuget mypackage.nupkg myapikey -s http://mynugetserver

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>