I am using azure static webapp for an angular application using the related staticwebapp.database.config.json:
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"options": {
"set-session-context": false
},
"connection-string": "@env('DATABASE_CONNECTION_STRING')"
},
"runtime": {
"rest": {
"enabled": true,
"path": "/rest"
},
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"host": {
"mode": "production",
"authentication": {
"provider": "StaticWebApps"
}
}
},
"entities": {
"setup": {
"source": "dbo.Setup",
"rest": {
"path": "/setup",
"methods": ["get", "post", "put", "delete"],
"enabled": true
},
"permissions": [
{
"actions": ["create", "read", "update", "delete"],
"role": "anonymous"
}
]
},
"organizationDetail": {
"source": {
"object": "dbo.OrganizationDetail",
"type": "view"
},
"rest": {
"path": "/organization-detail",
"methods": ["get"],
"enabled": true
},
"permissions": [
{
"actions": ["read"],
"role": "anonymous"
}
]
}
}
}
I want to try the DataBase connection preview features, I perform the first GET to the following endpoint which target a sql view:
https://[target-static-app]/data-api/rest/organization-detail
...and it works like a charm:
but when I perform a PUT request to the setup endpoint:
url: https://[target-static-app]/data-api/rest/setup/1
payload: {Id: 1, Title: "Test2", PrimaryColor: "#33cc66", SecondaryColor: "#ccff33", OrganizationId: 1}
I can obtain only the following:
"error": {
"code": "BadRequest",
"message": "Invalid request body. Either insufficient or extra fields supplied.",
"status": 400
}
Following the relevant openapi generated:
{
"openapi": "3.0.1",
"info": {
"title": "Data API builder - REST Endpoint",
"version": "PREVIEW"
},
"servers": [
{
"url": "/rest"
}
],
"paths": {
"/setup/Id/{Id}": {
"get": {
"tags": [
"setup"
],
"description": "Returns an entity.",
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"setup"
],
"description": "Replace or create entity.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/setup_NoPK"
}
}
},
"required": true
},
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
},
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
}
}
},
"patch": {
"tags": [
"setup"
],
"description": "Update or create entity.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/setup_NoPK"
}
}
},
"required": true
},
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
},
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
}
}
},
"delete": {
"tags": [
"setup"
],
"description": "Delete entity.",
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"204": {
"description": "NoContent"
}
}
},
"parameters": [
{
"name": "Id",
"in": "path",
"required": true,
"schema": {
"type": "number"
}
}
]
},
"/setup": {
"get": {
"tags": [
"setup"
],
"description": "Returns entities.",
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
},
"nextLink": {
"type": "string"
}
}
}
}
}
}
}
},
"post": {
"tags": [
"setup"
],
"description": "Create entity.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/setup_NoAutoPK"
}
}
},
"required": true
},
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/setup"
}
}
}
}
}
}
},
"409": {
"description": "Conflict"
}
}
}
},
"components": {
"schemas": {
"setup": {
"type": "object",
"properties": {
"Id": {
"type": "number",
"format": ""
},
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
},
"setup_NoAutoPK": {
"type": "object",
"properties": {
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
},
"setup_NoPK": {
"type": "object",
"properties": {
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
},
"organizationDetail": {
"type": "object",
"properties": {
"Id": {
"type": "number",
"format": ""
},
"Name": {
"type": "string",
"format": ""
},
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"SetupId": {
"type": "number",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
},
"organizationDetail_NoAutoPK": {
"type": "object",
"properties": {
"Id": {
"type": "number",
"format": ""
},
"Name": {
"type": "string",
"format": ""
},
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"SetupId": {
"type": "number",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
},
"organizationDetail_NoPK": {
"type": "object",
"properties": {
"Name": {
"type": "string",
"format": ""
},
"Title": {
"type": "string",
"format": ""
},
"PrimaryColor": {
"type": "string",
"format": ""
},
"SecondaryColor": {
"type": "string",
"format": ""
},
"OrganizationId": {
"type": "number",
"format": ""
}
}
}
}
}
}
No way to make it work, what I am missing?



I believe that your issue is that your
PUTcommand is expecting thesetup_NoPKschema, which, according to the definition in your file, doesn't include thePrimaryKeyfield, which in your case isId.Thus, when you send your
PUTrequest with theIdfield filled out, validation is throwing is back as anoverpost.If you look at the documentation here you can see that the
Idvalue for the entity is passed as a parameter in the URL itself forPUTandPATCHcalls.This means that in your actual payload, your content should not include the
Idvalue, like this: