This was somehow unexpected. I was flawlessly developing my API using Azure Functions and then BANG! - suddenly my functions are in error state. Just like that - no stack trace, no detailed explanation. I took me some time to realize, that they all have one thing in common - they share the admin part. Apparently Functions have some problems when you're using HttpTrigger with a custom route containg admin word. What is the reason?
Check the codebase
Let's take a quick look at the codebase of Functions. Finding a place, which causes the error is pretty simple:
internal static void ValidateHttpFunction(string functionName, HttpTriggerAttribute httpTrigger, bool isProxy = false)
if (string.IsNullOrWhiteSpace(httpTrigger.Route) && !isProxy)
// if no explicit route is provided, default to the function name
httpTrigger.Route = functionName;
// disallow custom routes in our own reserved route space
string httpRoute = httpTrigger.Route.Trim('/').ToLowerInvariant();
throw new InvalidOperationException("The specified route conflicts with one or more built in routes.");
As you can see, all routes which start with admin are disallowed. While this is perfectly fine, I couldn't find any mention in the documentation, which would clarify this.
When in doubt always try to check the source. Some answers will be quite difficult to obtain, but you'll end up with a much better overall understanding of the library. The rest will be rather straightforward, nothing you can't handle, isn't it?
13. February 2018
For some reasons developers are often not aware of the total costs of the solution, they've been working on for the last months. Usually the path is pretty simple:
Develop > Test > Deploy > Repeat
There's hardly any feedback regarding optimizations, which are not hard performance improvements. While before cloud era saving were not so obvious(you allocated a particular amount of money anyway to buy your servers), now all looks a bit different.
I, as a developer, am able to easily predict and calculate expected cost of a solution I'm making. I have detailed pricings, I can prepare and test a POC I was asked for. I don't have to deploy anything to physical machines and you - as my company - won't buy devices and technologies, which may not meet our requirements. So the questions is:
Should I care?
Nah, it's a silly question - of course I should. But to be honest - nobody asks. While it's deployed to a production slot, I cannot control it. In most cases I don't have sufficient permissions to be able to control the overal cost. And you know what? That's perfectly fine, it's not my responsibility.
On the other hand nobody will ask for an improvement unless we're hitting the limit. We can afford spending 10000 USD monthly for this solution and it costs us 9999,99 USD? That's superb. We could pay half of this price?! Well, nobody told us so...
...and nobody asked.
The point is - if there's room for improvement, do it. This is especially true in the cloud environment - you can save 5ms in one place? Save it! Cloud is all about computation power and time. Whenever you improve an algorithm, you save both power and time. By saving both you're saving money. That's what makes you a professional.