У меня есть пользовательский контроллер, созданный с помощью учебника hartl, который регистрирует новых пользователей через форму с вводом электронной почты и пароля.Это работает правильно.Я пытаюсь отправить HttpWebRequest из проигрывателя редактора Unity на мой сервер, чтобы зарегистрировать нового пользователя из строки пароля, созданной в Unity.Я предоставил ответ об ошибке и код, относящийся к попытке ниже.
WebException: удаленный сервер возвратил ошибку: (422) Unprocessable Entity.System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult AsyncResult) (при> <4b9f316768174388be8ae5baf2e6cc02>: 0) System.Net.HttpWebRequest.GetResponse () (при <4b9f316768174388be8ae5baf2e6cc02>: 0) UnityStandardAssets.Characters.RigidbodyFirstPersonController.RigidbodyFirstPer> sonController.resetScene3() (at> Assets / Scripts / RigidbodyFirstPersonController.cs: 463)
Код HttpWebRequest от RigidbodyFirstPer> sonController.resetScene3 ():
public static string _url = "https://immense-castle-53592.herokuapp.com/signup";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_url);
request.Method = "POST";
request.Headers ["action"] = "/users";
request.Headers ["class"] = "new_user";
request.Headers ["id"] = "new_user";
request.Headers ["utf8"] = "✓";
request.Headers ["authenticity_token"] = "NNb6+J/j46LcrgYUC60wQ2titMuJQ5lLqyAbnbAUkdo=";
request.Headers ["user_email"] = "jakebrantley44@gmail.com";
request.Headers ["user_password"] = passwordUnity;
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Debug.Log("Publish Response: " + (int)response.StatusCode + ", " + response.StatusDescription);
if((int)response.StatusCode == 200)
{
//SetEnvironmentVersion(version);
}
}
Пользователи Ruby on Rails1010 * class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
puts params[:password]
if @user.save
log_in @user
flash[:success] = "Welcome to your vault!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:email, :password)
end
end
Routes.rb Rails.application.routes.draw do
get 'sessions/new'
root 'static_pages#home'
get '/help', to: 'static_pages#help'
get '/demo', to: 'static_pages#demo'
get '/about', to: 'static_pages#about'
get '/contact', to: 'static_pages#contact'
get '/signup', to: 'users#new'
get '/login', to: 'sessions#new'
post '/login', to: 'sessions#create'
post '/signup', to: 'users#create'
post '/', to: 'users#create'
get '/show', to: 'users#create'
delete '/logout', to: 'sessions#destroy'
resources :users
end
Обновление: новый код при попытке использовать Stream.HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_url);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
// Add dictionary strings
headers["action"] = "/users";
headers["class"] = "new_user";
headers["id"] = "new_user";
headers["utf8"] = "✓";
headers["authenticity_token"] = "NNb6+J/j46LcrgYUC60wQ2titMuJQ5lLqyAbnbAUkdo=";
headers["user_email"] = "jakebrantley44@gmail.com";
headers["user_password"] = passwordUnity;
byte[] headersByte = UnityWebRequest.SerializeSimpleForm(headers);
// Set the ContentLength property of the WebRequest.
request.ContentLength = headersByte.Length;
Debug.Log( headersByte );
// Get the request stream.
Stream dataStream = request.GetRequestStream ();
// Write the data to the request stream.
dataStream.Write (headersByte, 0, headersByte.Length);
// Close the Stream object.
dataStream.Close ();
// Get the response.
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
// Display the status.
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream ();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader (dataStream);
//Read the content
string responseFromServer = reader.ReadToEnd ();
// Display the content.
Console.WriteLine (responseFromServer);
Debug.Log(responseFromServer);
reader.Close ();
dataStream.Close ();
response.Close ();
Debug.Log("Publish Response: " + (int)response.StatusCode + ", " + response.StatusDescription);
if((int)response.StatusCode == 200)
{
}
}