আরএসপিএক অনুরোধে অনুরোধ শিরোনাম কীভাবে সেট করবেন?


127

কন্ট্রোলার স্পেসে, আমি এই জাতীয় পোস্ট শিরোনাম হিসাবে সেট করতে পারি:

request.accept = "application/json"

তবে অনুরোধটিতে "অনুরোধ" অবজেক্টটি শূন্য। তাহলে আমি এখানে এটি কীভাবে করব?

আমি জসনকে এইচডিপি গ্রহণ করে শিরোনাম সেট করতে চাইলে তাই আমি এটি করতে পারি:

get '/my/path'

এর পরিবর্তে

get '/my/path.json'

উত্তর:


130

আপনি এখানে বর্ণিত হিসাবে আপনার () পদ্ধতির তৃতীয় যুক্তি হিসাবে HTTP শিরোনাম নির্দিষ্ট করতে সক্ষম হবেন:

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

এবং এখানে

http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process

সুতরাং, আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন:

get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}

3
আমাদের 'HTTP_ACCEPT' ব্যবহার করা দরকার: get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
ম্যাট শিলিপোতি

58
দ্রষ্টব্য: এটি সংহত পরীক্ষার জন্য, নীচের মন্তব্যের অনুরূপ, আরএসপিসি-রেলস নিয়ন্ত্রক পরীক্ষায়, আপনি ব্যবহার করবেন: অনুরোধ.env ["HTTP_ACCEPT"] =
অ্যালেক্স সোটো

5
ছোট্ট গোচা যা আমি দৌড়েছি কারণ আমি নির্বোধ: শিরোনাম কীগুলি স্ট্রিংস হতে হবে। প্রতীকগুলি প্রদর্শিত হবে না।
আজমুরমান

@ আজমুরমান এখন প্রতীকগুলি কাজ করে: "অনুমোদন" শিরোনাম হতে পারে :authorization
ফ্র্যাংকলিন ইউ

13
নতুন আরএসস্পেক 3 সিনট্যাক্সটি get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }`এর মত হবে
সিরিল ডুচন-ডরিস

39

আমি এটি টেস্টে ব্যবহার করেছি :: ইউনিট:

@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index

3
একইভাবে, অ্যালেক্স সোটো আর একটি উত্তরে একটি মন্তব্যে যেমন মন্তব্য করেছে, আরএসপেক-রেলস নিয়ন্ত্রক পরীক্ষায়, আপনি ব্যবহার করতে পারেন: অনুরোধ.এনভি ["HTTP_ACCEPT"]
জেরি 3

অনেক অনেক ActionController::TestCase
বন্ধুকে

+1 আমি Cookieশিরোনামগুলির হ্যাশটিতে একটি কী ব্যবহার করার চেষ্টা করেছি (কারণ এটি আমার ব্রাউজারটি প্রেরণ করে) তবে এটি কার্যকর হয়নি। তারপরে আমি request.keysএকটি চাবিটি করেছি এবং দেখেছি HTTP_COOKIE। যে কাজ করে। তাদের সত্যই এটি আরও ভাল নথি করা উচিত।
কেলভিন

এটা সত্যিই কাজ করেছে! আমি উত্তরটি github.com/rspec/rspec-rails/issues/65
স্টেপান জাখারভ

@ সিতসে সিজব্রান্দিজ টেস্ট :: ইউনিট সম্পর্কে কেউ জিজ্ঞাসা করলেন না। আরএসপেক সম্পর্কে প্রশ্ন করা হয়েছে।
ব্রায়ান ডিমাস

18

আমি এখানে এটি যুক্ত করছি, কেননা আমি বড়সড়ভাবে রেলগুলি 5.1.rc1 এ করার চেষ্টা করে আটকে গিয়েছি

গেট পদ্ধতির স্বাক্ষর এখন কিছুটা আলাদা।

কীওয়ার্ড আর্গুমেন্ট হিসাবে আপনাকে পাথের পরে বিকল্পগুলি নির্দিষ্ট করতে হবে, যেমন

get /some/path, headers: {'ACCEPT' => 'application/json'}

এফওয়াইআই, কীওয়ার্ড আর্গুমেন্টের পুরো সেটটি হ'ল:

params: {}, headers: {}, env: {}, xhr: false, as: :symbol


18

এটি নিয়ামক চশমার জন্য কাজ করছে, চশমার অনুরোধ নয়:

request.headers["My Header"] = "something"

2
এটি আমার পক্ষে কাজ করেছে, আপনি কীভাবে শিরোনামগুলি পুনরুদ্ধার করছেন তার উপর নির্ভর করে, আপনি যদি ব্যবহার করছেন request.headersবাrequest.env
এডগার অরটেগা

3
দ্রষ্টব্য: এটি নিয়ামক পরীক্ষার জন্য, প্রশ্নটিতে উল্লিখিত সংহতকরণ পরীক্ষার জন্য নয়।
ফ্র্যাংকলিন ইউ

3
ইন্টিগ্রেশন পরীক্ষার জন্য কাজ করে না। তবে নিয়ামক পরীক্ষার সাথে কাজ করে।
পেট্রা গাজারভ

9

আমাকে আলাদাভাবে শিরোনাম স্থাপন করতে হবে

request.headers["Accept"] = "application/json"

এটি get / মোছা / .... এর মাধ্যমে পাঠানোর চেষ্টা করা হ'ল রেল 4-এ সম্পূর্ণ আবর্জনা এবং আমার মাথায় ব্যথা হয় কারণ এটি কখনও শিরোনাম হিসাবে নয় তবে পরামিতি হিসাবে প্রেরণ হয়।

{"Accept" => "application/json"}

5
এটি কি সত্যিই ওপি প্রশ্নের উত্তর সরবরাহ করে? যদি এটি একটি নতুন প্রশ্ন হয় তবে একটি নতুন প্রশ্ন খোলাই ভাল ধারণা।
εηοιτ.εηοιτ.βε

9

সাথে আরএসপেক ব্যবহার করা হচ্ছে Rack::Test::Methods

header 'X_YOUR_HEADER_VAR', 'val'
get '/path'

শিরোনাম ভেরির মাধ্যমে আসবে X-Your-Header-Var


দ্রষ্টব্য: এটি Test::Unitআরএসপেকের জন্য নয়।
ফ্রাঙ্কলিন ইউ

এটি ইঙ্গিত করে আরএসপেক
জেমস টান

1
হ্যাঁ। আরএসপিকে এটি ndefined method 'header'আমার জন্য ত্রুটি উত্থাপন করে ।
Масленков

7

আরএসপেক 3 এর সাহায্যে আপনি নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করতে পারেন

get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }

অফিসিয়াল আরএসপেকের ডকুমেন্টেশনে বর্ণিত (লিঙ্ক পয়েন্টগুলি v3.7 এ)


মিষ্টি। শুধু আমি যা খুঁজছিলাম। ধন্যবাদ!
ফ্রান্সিসকো কুইন্টেরো

5

উভয় xhr: trueএবং শিরোলেখ প্রেরণ করতে , আমাকে যেমন করতে হয়েছিল:

my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers


না করা উচিত headers =হবে my_headers =?
ওয়েবাহোলিক

সংশোধন করা হয়েছে। ধন্যবাদ @ ওয়েবাহলিক
জিম স্টুয়ার্ট

2

আপনার প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছিল তবে আপনি যদি অন্য কোনও ক্রিয়ায় কিছু পোস্ট করতে চান তবে আপনাকে এটি করতে হবে:

post :save, {format: :json, application: {param1: "test", param2: "test"}}

2

এর মতো কিছু চেষ্টা করুন:

get :index, :format => 'json' 

নিশ্চিত নয়, তবে সম্ভবত কাজ করে কারণ রেলগুলি সেই রুটের জন্য। ফর্ম্যাট খুঁজছে; এটি আমার জন্য কাজ করার জন্য ঘটেছে।
অ্যালান

2
যদি কেউ ভাবছেন, এটি কেবল format=jsonক্যোয়ারী পরম হিসাবে যুক্ত হয়েছে । শিরোনামের ক্ষেত্রের মতো নয়।
কেভিন কারমোডি 20'14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.