Parece un problema simple, pero en todos los demás lugares se sugirió agregar "aplicación/json" en 'encabezados' que he probado.
'Aceptar' y 'Tipo de contenido' son ambos "aplicación/json". También probé json y stringfy 'Body' pero sigue obteniendo 415 en la extensión JavaScript de Chrome.
textArraySample = ["sample","sample2"]; var serverUrl = "https://webappcontentnotification.azurewebsites.net/api/ContentUpload"; const body={ "textbatch":textArraySample, "userId": userId, "url": window.location.href } let result = fetch(serverUrl, { method: 'POST', mode: "no-cors", headers: { 'Accept': "application/json", 'Content-Type': "application/json" }, body: JSON.stringify(body) }) .then(response => { console.log('response:', response); }) .catch((error) => { console.log('Error:', error); }); Actualización: parece que "Tipo de contenido" no está configurado correctamente 
No vi esto mencionado en otro lugar. La causa raíz es que "Content-Type" no se puede establecer en "application/json" mientras se usa "Mode: no-cors". enlace aquí
mode: "no-cors" solo permite un conjunto limitado de encabezados en la solicitud:
Aceptar
Aceptar-Idioma
Contenido-Idioma
Tipo de contenido con un valor de application/x-www-form-urlencoded, multipart/form-data o text/plain