所以我试图使用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
请尝试以下操作,从如何在 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(",")
}
每个站点:
请注意,设置“访问控制允许起源”=
嗨,当我与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类: 和我的用户类: 我尝试了没有