Unity中的RESTful客户端-验证错误

时间:2019-11-28 07:48:01

标签: rest unity3d client-server validationerror

我有一个使用ASP.Net创建的RESTful服务器,并尝试使用Unity中的RESTful客户端连接到该服务器。 GET工作完美,但是发送POST请求时出现验证错误。同时,从邮递员发送请求时,GET和POST均起作用。 我的服务器:

        [HttpPost]
        public IActionResult Create(User user){
            Console.WriteLine("***POST***");
            Console.WriteLine(user.Id+", "+user.sex+", "+user.age);
            if(!ModelState.IsValid)
                return BadRequest(ModelState);
            _context.Users.Add(user);
            _context.SaveChanges();
            return CreatedAtRoute("GetUser", new { id = user.Id }, user);
        }

我的客户:

IEnumerator PostRequest(string uri, User user){
        string u = JsonUtility.ToJson(user);
        Debug.Log(u);
        using (UnityWebRequest webRequest = UnityWebRequest.Post(uri, u)){
            webRequest.SetRequestHeader("Content-Type","application/json");
            yield return webRequest.SendWebRequest();
            string[] pages = uri.Split('/');
            int page = pages.Length - 1;
            if (webRequest.isNetworkError || webRequest.isHttpError){
                Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
            }
            else{
                Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
            }
        }
    }

我尝试使用Json转换并使用WWWForm自行编写字符串,但是错误仍然存​​在。
该错误表明这是未知的HTTP错误。打印返回的文本时,它说:
"One or more validation errors occurred.","status":400,"traceId":"|b95d39b7-4b773429a8f72b3c.","errors":{"$":["'%' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0."]}}
在服务器端,它可以识别正确的方法和控制器,但是,它甚至无法到达方法的第一行(Console.WriteLine)。然后它说:“正在执行ObjectResult,写入类型为'Microsoft.AspNetCore.Mvc.ValidationProblemDetails'的值”。 这是所有服务器端消息:

info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 POST http://localhost:5001/user application/json 53
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'TheNewestDbConnect.Controllers.UserController.Create (TheNewestDbConnect)'
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
      Route matched with {action = "Create", controller = "User"}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Create(TheNewestDbConnect.Data.Entities.User) on controller TheNewestDbConnect.Controllers.UserController (TheNewestDbConnect).
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.ValidationProblemDetails'.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
      Executed action TheNewestDbConnect.Controllers.UserController.Create (TheNewestDbConnect) in 6.680400000000001ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'TheNewestDbConnect.Controllers.UserController.Create (TheNewestDbConnect)'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 11.3971ms 400 application/problem+json; charset=utf-8
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]

我不知道发生了什么以及如何解决。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

原来,我只是缺少一个上载处理程序。添加此行即可解决:webRequest.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(JsonObject));