I have my API hooked up to Azure's API Management service. When I try to call one of my endpoints, I get the following error:
{
"statusCode": 500,
"message": "Internal server error",
"activityId": "79c1bef9-a05d-4734-b729-0657c1749e40"
}
I enabled tracing and this is the trace json
{
"traceId": "79c1bef9a05d4734b7290657c1749e40",
"traceEntries": {
"inbound": [
{
"source": "api-inspector",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002259",
"data": {
"request": {
"method": "GET",
"url": "https://mysite.azure-api.net/partner/api/partner/ClientsActions",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"value": "..."
},
{
"name": "Connection",
"value": "Keep-Alive"
},
{
"name": "Host",
"value": "mysite.azure-api.net"
}
]
}
}
},
{
"source": "api-inspector",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002352",
"data": {
"configuration": {
"api": {
"from": "/partner",
"to": null,
"version": null,
"revision": "1"
},
"operation": {
"method": "GET",
"uriTemplate": "/api/partner/ClientsActions"
},
"user": {
"id": "1",
"groups": [
"Administrators",
"Developers"
]
},
"product": {
"id": "57c59e76ea12f3007f060002"
}
}
}
},
{
"source": "cors",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002544",
"data": "Origin header was missing or empty and the request was classified as not cross-domain. CORS policy was not applied."
},
{
"source": "choose",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002633",
"data": {
"message": "Expression was successfully evaluated.",
"expression": "context.Request.Url.Query.ContainsKey(\"key\")",
"value": false
}
},
{
"source": "set-header",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002744",
"data": {
"message": "Expression was successfully evaluated.",
"expression": "(string)context.User.Id",
"value": "1"
}
},
{
"source": "set-header",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002802",
"data": {
"message": "Specified value was assigned to the header (see below).",
"header": {
"name": "x-client-id",
"value": "1"
}
}
}
],
"backend": [
{
"source": "forward-request",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0002909",
"data": {
"message": "Backend service URL is not defined."
}
},
{
"source": "forward-request",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0004824",
"data": {
"messages": [
null,
"Backend service URL is not defined."
]
}
}
],
"outbound": [
{
"source": "transfer-response",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0007989",
"data": {
"message": "Response headers have been sent to the caller."
}
},
{
"source": "transfer-response",
"timestamp": "2017-10-24T21:50:09.6322945Z",
"elapsed": "00:00:00.0008730",
"data": {
"message": "Response body streaming to the caller is complete."
}
}
]
}
}
The "Backend service URL is not defined." messages look suspicious to me but I can't find any information on what they might mean. If I had to guess I'd say API Management is having issues talking to my real API but I can access it fine directly.
Anyone have any idea what might be going on or what I should look at? I'm running the tests directly through the developer portal provided by Azure.
Jason
In your Swagger file, make sure it mentions the correct host, basePath and schemes entries. Swashbuckle generated Swagger files tend not to contain those.
Here is an example:
{
"swagger": "2.0",
"info": {
"title": "Your title",
"version": "1.0",
"description": "Your description"
},
"host": "server.host.com",
"basePath": "/api",
"schemes": [
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
Take specific interest in "host", "basePath" and "schemes" and change those according to your API.