met*_*key 7 c# ruby-on-rails unity-game-engine
我有一个使用hartl教程创建的用户控制器,通过电子邮件和密码输入通过表单注册新用户.这工作正常.我正在尝试从Unity编辑器播放器向我的服务器发送HttpWebRequest,以便从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)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
更新:尝试使用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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
解决了!
Http.Web.Request为UnityWebRequest。Http.Web.Request标头不适用于传递参数。user_params函数更改为以下内容。控制器需要设置.fetch参数值:def user_params
puts "user_params runs"
unless params["user"].blank?
puts "main state user_params"
params.fetch(:user, {:email => params[:EMAIL], :password => params[:PASSWORD]}).permit(:email, :password)
end
puts "unless state in user_params"
params.fetch(:user, {"email"=>params[:EMAIL], "password"=>params[:PASSWORD]}).permit(:email, :password)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |