質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

2111閲覧

UnityWebRequest.Post()がエラーコード422になってしまう

E28

総合スコア12

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/09/07 10:09

編集2020/09/07 10:15

前提・実現したいこと

UnityからRailsサーバーへPost送信したい。
最終的には、Unityからidを送り、サーバー側でidを元に画像を呼び出し、Unityに返すという処理がやりたいのですが、そもそも、Postがうまく出来ず難儀しています。

発生している問題・エラーメッセージ

Unityのconsoleに次のエラーが出ています。

HTTP/1.1 422 Unprocessable Entity UnityEngine.Debug:Log(Object) <GetImage>d__3:MoveNext() (at Assets/Scripts/ImageImport.cs:46) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs:17)

該当のソースコード

Unityはエディター上のPlayで、railsはlocalhostで動作させています。

Unity側

Unityのスクリプトはこちらの記事を参考にほぼそのままコピーして作成しています。
このスクリプトをCreateEmptyで新規作成したGameObjectに貼り付けています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Networking; 5 6public class ImageImport : MonoBehaviour 7{ 8 9 void Start() 10 { 11 StartCoroutine(GetImage()); 12 } 13 14 public class PostData 15 { 16 public int id; 17 } 18 19 IEnumerator GetImage() 20 { 21 PostData postData = new PostData(); 22 postData.id = 1; 23 string myJson = JsonUtility.ToJson(postData); 24 byte[] byteData = System.Text.Encoding.UTF8.GetBytes(myJson); 25 UnityWebRequest request = new UnityWebRequest(url, "POST"); 26 request.uploadHandler = (UploadHandler)new UploadHandlerRaw(byteData); 27 request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); 28 request.SetRequestHeader("Content-Type", "application/json"); 29 yield return request.SendWebRequest(); 30 31 if (request.isNetworkError || request.isHttpError) 32 { 33 Debug.Log(request.error); 34 } 35 else 36 { 37 var text = request.downloadHandler.text; 38 Debug.Log($"response text :{text}"); 39 //↓最終的にはこういう処理をやっていきたい 40 //GetComponent<Renderer>().material.mainTexture = ((DownloadHandlerTexture)request.downloadHandler).texture; 41 42 } 43 } 44}
Rails側
  • controller

Ruby

1class GamesController < ApplicationController 2 # 他のアクションは省略 3 def image 4 render json: {image: 'image'} 5 # image = Game.find_by(id: params[:id]).game_objects[0].image 6 # ↑最終的にはこういう処理をやっていきたい 7 end 8end
  • routes

Ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root 'games#index' 4 resources :games, only: [:index, :show, :new, :create] do 5 collection do 6 post 'image' 7 end 8 end 9end

試したこと

get用のルーティングを追加し、get送信を試したところ、そちらはエラーが起こりませんでした。
データの載せ方が悪いのかとWWWFormクラスも使ってみましたが、エラーコード422が出るのは変わりませんでした。
RailsをAPIとして使う経験がほぼなく、そちらがおかしいのかもしれません。

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.7f1

その他必要な情報があればお知らせください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Rails側にエラーログが出ていないでしょうか?
似た症状でCSRFプロテクションやバリデーションに引っかかったものがあります。

投稿2020/09/07 11:20

shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問