当前位置: 首页 > 知识库问答 >
问题:

无法使用内容类型开机自检:应用程序/json 从角度到轨道

赖杰
2023-03-14

所以我试图使用Content-Type: Application/json从角向我的rails后端发送一个POST请求。我在控制台中收到以下错误:

angular.js:12578选项http://localhost:3000/api/student_create404(未找到)

XMLHttpRequest无法加载http://localhost:3000/api/student_create.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。起源http://localhost:8008因此不允许访问。响应具有HTTP状态代码404。

注意:当我使用<code>内容类型:application/x-www-form-urlencoded<code>时,post请求正常工作

它还可以在Postman中使用头中设置的application/json内容类型。

角度控制器:

.controller('View1Ctrl', function($scope, $http) {

  var data = {
    name: "name"
  };
  $http({
    url: 'http://localhost:3000/api/student_create',
    dataType: 'json',
    method: 'POST',
    data:data,
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin": "*"
    }
  }).then(function(response) {
    console.log(response)
  }, function(error) {
    console.log(error)
  });

});

API控制器(Rails):

class ApiController < ApplicationController
     before_action :set_headers
     skip_before_action :verify_authenticity_token

  def set_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT'
    headers['Access-Control-Request-Method'] = '*'
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    end
  def create_student
    student = StudentUser.new
    student.name= params[:name]
    student.save
    render json: "test".to_json #temporary
  end

路由: 发布 'api/student_create' =

编辑:前端已打开http://localhost:8008,后端位于本地主机:3000


共有2个答案

吕俊才
2023-03-14

请尝试以下操作,从如何在 Rails API 应用程序中配置 CORS 接受标头

因此,即使您的消费者在“localhost:3000”上,而您的提供商在“localhost:3001”上,响应也将被忽略,除非您的web服务设置了许可的CORS策略。此策略由提供商在HTTP响应中设置消费者应用程序(例如浏览器)要强制执行的特定CORS头来定义。例如,配置这些标头:

# in config / application.rb
config.action_dispatch.default_headers = {
  'Access-Control-Allow-Origin' => 'http://my-web-service-consumer-site.com',
  'Access-Control-Request-Method' => % w {
    GET POST OPTIONS
  }.join(",")
}

每个站点:

请注意,设置“访问控制允许起源”=

商嘉木
2023-03-14

嗨,当我与Angular交互Rails时,我也遇到了这个问题。经过大量研究,我发现gem“rack-cors”解决了这个问题。您可以在此处关注它的留档。默认情况下,Rails不允许跨源资源共享。所以基本上它可以很好地处理跨源请求。

步骤:

安装宝石:

gem install rack-cors

或者在您的 Gemfile 中:

gem 'rack-cors', :require => 'rack/cors'

application.rb文件

module YourApp
  class Application < Rails::Application

    # ...

    # Rails 3/4

    config.middleware.insert_before 0, "Rack::Cors" do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

    # Rails 5

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

  end
end
 类似资料:
  • 问题内容: 我有一个烧瓶应用程序,具有以下视图: 但是,这仅在请求的内容类型设置为时才有效,否则dict 为None。 我知道请求主体为字符串,但我不想每次客户端忘记设置请求的内容类型时都将其解析为字典。 有没有办法假设每个传入请求的content- type是?我想要的就是始终访问有效的字典,即使客户端忘记将应用程序的内容类型设置为json。 问题答案: 使用并设置为: 从文档中: 默认情况下,

  • 问题内容: 我有一个宁静的服务(发布),它消耗(application / json)并产生(application / json)。此服务的单个参数是带注释的java对象。 我正在使用org.jboss.resteasy.client.ClientRequest将请求发送到服务。但是,我在客户端得到了这个异常和异常: 找不到内容类型应用程序/ json类型的编写器。 这是否意味着我缺少一些库ja

  • 问题内容: 我在Angular上使用资源尝试了以下命令: 但是无法正确生成http内容类型,在这种情况下为“ application / json”。 我已经看到类似的问题,例如AngularJS资源未设置Content-Type,但是我拥有最新的Angular版本(1.0.6 / 1.1.4)。 上面的代码有什么问题? 结论 如以下所述,HTTP Get方法不应具有主体。 属性标头在上述版本中不

  • 我一直试图仅使用文件内容检测MIME类型,使用Apache Tika Core和Apache Tika Parser1.23 jars。下面是用于相同内容的代码: Tika无法检测扩展名为。tmp(text/plain file)和iso-8859-1字符集的文件的内容类型,内容如下: èé 通过以下方式正确检测具有相同配置和以下内容的文件: 000000000000000000000000000

  • 我正在Eclipse Enterprise中通过Spring框架而不是Spring Boot编写一个MVC项目。使用Postman,我将向我的方法发送一个json对象: 但是在Eclipse中,我收到了这个错误: 我认为这与我的pom.xml和依赖有关: pom中是否有任何内容。xml我应该更改吗? 其他细节如网络。xml: -servlet.xml

  • 我正在向另一个服务发送GET请求,该服务以以下格式返回: 我以这种方式使用响应实体: 然而,当发送GET请求时,我得到了这个响应:类型定义错误:[简单类型,类com.tdl.model.ArrayResponsePojo];嵌套异常是com.tdl.model.ArrayResponsePojo 我不知道为什么我会得到这个解释,因为我确实有构造器。这是我的pojo类: 和我的用户类: 我尝试了没有