Я хотел бы публиковать сообщения из 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)
{
}
}