The second URL you mention looks kinda OK. But to reliably get the URL which hosts your address book, you need to query the addressbook-home-set property of the principal record of your account.
Like:
PROPFIND Depth:0 /12345/principal/
<propfind xmlns="DAV:">
<prop>
<addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav"/>
</prop>
</propfind>
and to find the principal, you query for the 'principal-URL' property, e.g. on /, with your auth set:
PROPFIND Depth:0 /
<propfind xmlns="DAV:">
<prop><principal-URL/></prop>
</propfind>
You might also want to use a debugging proxy like Charles or Fiddler to figure out what your .NET framework is actually sending to the server.