2

簡単な Rails 4.1.4 アプリケーションがあり、別のホスト上の AngularJS アプリケーションをその API に接続しようとしています。アクセスに問題はありませんが、Rails はリクエストが HTML であると考えているようで、Content-Type: 'application/json' を無視します。

Started GET "/api/v1/locations?access_token=xxx&headers=%7B%22Content-type%22:%22application%2Fjson%22%7D" for 127.0.0.1 at 2014-09-03 17:12:11 +0100
Processing by Api::V1::LocationsController#index as HTML
Parameters: {"access_token"=>"xxx", "headers"=>"{\"Content-type\":\"application/json\"}"}

私の NG アプリケーションでは、次のようなヘッダーの組み合わせをいくつか試しました。

app.factory('Location', ['$resource', "$localStorage",
  function($resource, $localStorage){
    return $resource('http://my-api.com/api/v1/locations/', {headers:{'Content-type' : 'application/json'}}, {
      query: {
        method: 'GET',
        headers: {'Content-type': 'application/json'},
        isArray: true,
        dataType: 'json',
        params: { access_token: $localStorage.accessToken }
      }...

レスポンスは NG 側では問題ないように見えます。ロケーション コントローラーにこれしかないにもかかわらず、JSON で応答しています。

class Api::V1::LocationsController < Api::V1::BaseController

  doorkeeper_for :all
  before_filter :authorize
  respond_to :json

  def index
   @locations = @current_user.locations.order("created_at desc").limit(5)
   respond_with @locations
  end

end

また、corsヘッダーを設定しました(および設定解除をテストしました)。

スラッシュが含まれている場合、Rails は content-type ヘッダーを読み取らないことをどこかで読みました...

これは多くの問題を引き起こしているようには見えませんが、アプリケーションの一部である Doorkeeper に干渉していると思います。

4

1 に答える 1