У меня есть простой веб-сервис в .Net Core 2.1.Я хочу отправить из Unity 3D, но это не работает - PullRequest
0 голосов
/ 20 апреля 2019

Я хотел бы публиковать сообщения из Unity3d в веб-сервисе (RESTFUL) на основе .Net Core 2.1.GET работает, POST нет.

Я получил

{"": ["При анализе значения обнаружен неожиданный символ: {. Path '', строка 1, позиция 1."]}

Я также пытался изменить RequestHeader, но он не работает.

Используя отдельный клиент .Net, сработал следующий код.

HttpClient().PostAsJsonAsync(weblink,SerializedData)

что за магия стоит за PostAsJsonAsync?

В Unity3D я не могу использовать расширения для HttpClient.

Это код в Unity3d

    void Start()
    {
        StartCoroutine(postUnityWebRequest());
    }

    IEnumerator postUnityWebRequest()
    {
        ///<summary>
        /// Post using UnityWebRequest class
        /// </summary>
        var jsonString = "{\"Id\":3,\"Name\":\"Roy\"}";
        byte[] byteData = System.Text.Encoding.ASCII.GetBytes(jsonString.ToCharArray());

        UnityWebRequest unityWebRequest = new UnityWebRequest("http://localhost:2071/api/Commands?Id=1", "POST");
        unityWebRequest.uploadHandler = new UploadHandlerRaw(byteData);

        unityWebRequest.method = UnityWebRequest.kHttpVerbPOST;
        unityWebRequest.SetRequestHeader("Content-Type", "application/json");
        unityWebRequest.SetRequestHeader("Accept", "application/json"); 
        yield return unityWebRequest.SendWebRequest();

        if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
        {
            Debug.Log(unityWebRequest.error);
        }
        else
        {
            Debug.Log("Form upload complete! Status Code: " + unityWebRequest.responseCode);
        }
    }

Это код длявеб-сервис.

namespace WebService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]


    public class CommandsController : ControllerBase
    {

        private static List<string> commandToBeExecuted = new List<string>();

        // GET: api/Commands
        [HttpGet]
        public string Get()
        {
            if (commandToBeExecuted.Count > 0)
            {
                string output = commandToBeExecuted.First();
                commandToBeExecuted.RemoveAt(0);
                return output;
            }

            return "-1";

        }

        // GET: api/Commands/5
        [HttpGet("{id}", Name = "Get")]
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/Commands
        [HttpPost]
        public void Post([FromBody] string value)
        {
            commandToBeExecuted.Add(value);
        }

        // PUT: api/Commands/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
            int debugShouldStopHere = 0;
        }

        // DELETE: api/ApiWithActions/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...