This way works, but looks too complicated. Is there any simpler way to get basic server side properties? Yes, there is: it is called _spPageContextInfo (thanks to Andrey Markeev, who mentioned it). If you will check html output of your site, you will find that it is declared like this (with assumption that you are located on site collection http://example.com/test):
As you can see it contains many useful properties, like urls, culture info and even permission mask. Having this object our server code will be rewritten like this:
This is much better comparing with the example with ClientContext. The question however is how this variable is added to the page, where it is defined and where not. If we will check Sharepoint assemblies in decompiler, we will find that it is registered in private method SharePointClientJs_Register() of Microsoft.SharePoint.WebControls.ScriptLink class (will put whole code here, so you will know how properties are defined on server side):
Analyzing of the usage of this method shows, that it is added on the page with adding of standard scripts like init,js or sp.core.js via ScriptLink control to the page:
Also in InitJs_Register():
These 2 scripts are basic Sharepoint client scripts, they are defined on most Sharepoint pages (e.g. they will be defined on publishing pages or on application layouts pages). I.e. it is quite safe to use _spPageContextInfo object there. The only problem which I found at the moment is that it is not be available in apps. Anyway it is quite useful OTB tool which may help in your work and reduce the amount of code.