приложение ASP NEt Core. Как запустить из фронтенда процесс в контроллере

Приложение ASP Net Core. Контроллер на c# + React. Надо по нажатию кнопки запустить ffmpeg'ский скрипт на контроллере.

Контроллер

<pre>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using System.ComponentModel;

namespace WebConfigurator.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ScriptController : ControllerBase
    {
        string path = @"ffmpeg.exe";
        string args = @"some args";

        [HttpPost]
        public void Post()
        {
            Process process = new Process();
            process.StartInfo.FileName = path;
            process.StartInfo.Arguments = args;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
            process.Start();
            process.WaitForExit();
        }
    }
}


</pre>


Фрагмент из react 

controller = new AbortController();
signal = this.controller.signal;                  // будет нужен для остановки
urlScriptController: string = '/api/Script';
isSignal: boolean = false;                        // флаг для корректной остановки

options: RequestInit = {
    headers: {
        'Accept': 'application/json',
        'Content-type': 'application/json'
    },
    mode: 'cors',
    cache: 'no-cache',
    credentials: 'same-origin',
    method: 'POST',                                   
    signal: this.signal,
    redirect: 'follow',
    referrerPolicy: 'no-referrer' 
    // body не нужен т.к. просто дёргаем метод в контроллере

};

runScript() {
    fetch(this.urlScriptController, this.options
    ).then(response => {
        console.log('FFMPEG response: ', response);
        return response.json();
    }).catch(err => {
        console.log("Error Reading data FFMPEG" + err);
    });
    this.isSignal = true;
}

Потом кнопку нажимаем

<Button outline color="primary" onClick={this.runScript}>Go</Button> 

В консоль возвращает response где:

> "...status: 200, ok: true"

т.е. вроде бы норм статус и отсутствие ошибок. А также:

> Unexpected end of JSON input"

Что делать, куда грести?


Ответы (1 шт):

Автор решения: Boris

В контроллере может быть только один метод post (т.е. там вроде бы можно обойти это правило, но в первом приближении именно так). Я же пытался на один контроллер повесить несколько методов из фронтенда. Пришлось на каждый fetch с method: 'POST' писать новый контроллер.

→ Ссылка