我正在开发一个React应用程序,并且正在使用fetch发送请求。我最近做了一个注册表单,现在将它与它的API集成在一起。以前,API接受url编码的数据,并且一切正常。但是现在需求已更改,API接受了JSON中的数据,因此我不得不将内容类型标头从“
application / x-www-form-urlencoded”更改为“ application / json”。但我收到以下错误:
提取API无法加载http://local.moberries.com/api/v1/candidate。对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“
Access-Control-Allow-Origin”标头。因此,不允许访问源’ http://
localhost:3000 ‘。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-
cors”,以在禁用CORS的情况下获取资源。
我什至在API中设置了“ Access-Control-Allow-Headers”,但仍然无法使用。这是客户端的相关代码:
sendFormData() {
let {user} = this.props;
var formData = {
first_name: ReactDOM.findDOMNode(this.refs.firstName).value,
last_name: ReactDOM.findDOMNode(this.refs.lastName).value,
city: ReactDOM.findDOMNode(this.refs.currentCity).value,
country: ReactDOM.findDOMNode(this.refs.currentCountry).value,
is_willing_to_relocate: user.selectedOption,
cities: relocateTo,
professions: opportunity,
skills: skills,
languages: language,
min_gross_salary: minSal,
max_gross_salary: maxSal,
email: ReactDOM.findDOMNode(this.refs.email).value,
password: ReactDOM.findDOMNode(this.refs.password).value
};
var request = new Request('http://local.moberries.com/api/v1/candidate', {
method: 'POST',
mode: 'cors',
headers: new Headers({
'Accept': 'application/json',
'Content-Type': 'application/json'
})
});
var requestBody = JSON.stringify(formData);
console.log(requestBody);
fetch(request, {body: requestBody})
.then(
function (response) {
if (response.status == 200 || response.status == 201) {
return response.json();
} else {
console.log('Failure!', response.status);
}
}).then(function (json) {
var responseBody = json;
console.log(typeof responseBody, responseBody);
});
}
这是相关的API代码:
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers: Origin, Content-Type, application/json');
}
}
我真的不明白这个问题。任何帮助将不胜感激。
事实证明,CORS仅允许某些特定的内容类型。
Content-Type标头的唯一允许值为:
- 应用程序/ x-www-form-urlencoded
- 多部分/表单数据
- 文字/纯文字
来源:https : //developer.mozilla.org/en-
US/docs/Web/HTTP/Access_control_CORS
要将内容类型设置为’application / json’,我必须在API中设置一个自定义内容类型标头。刚刚删除了最后一个标头并添加了这个标头:
->header('Access-Control-Allow-Headers', 'Content-Type');
而且一切正常。
对于主体为jwt的POST api,空手道无法发送内容类型为application/jwt的主体。 而当我通过邮递员执行相同的工作。让我知道,如果我错过了什么。 我的API请求是: 此处未传递已发送的正文:给定url DCRurl和头内容类型='application/jwt',方法POST时请求有效负载\u body\u的类型\u jwt
我已经通过邮递员发送了标题Content-Type=Application/x-www-form-urlencoded的POST请求。 我得到了PHP中的数组,格式如下。我无法在PHP页面中访问。我该如何解决这个问题? 结果是
我试图向另一个接受内容类型“application/json-patch+json”的API发出补丁rest请求。我正在使用Spring的webclient,但我无法让它工作。我不断得到“415不支持的媒体类型” 我试过下面的; 我也试过: 对于这两种情况,我看到以下错误; 它似乎变成了'application/x-www-form-urlencoded;charset=utf-8',是否可能对此
下面是我的Ajax请求: 如果我没有精确的内容类型,我就无法再看到Firebug的请求。相反,当我添加内容类型时,我可以看到POST请求(由于我的URL是false而出现错误),但在我的头中,内容类型默认是URL编码的表单。 我想要的是通过JSON数据发送表单的详细信息。谢谢你的帮助
我想强制内容类型为application/json,但我有一个模式“no cors”,实际上内容类型的返回是:text/plain;charset=UTF-8传递头时是一样的,所以我不知道怎么做。 我已经尝试过使用fetch或Axios,URL在HTTP中,我在本地工作,所以可能是问题所在?我试过邮递员,效果很好。 所以,我想要的内容类型是:application/json,而不是内容类型:tex
问题内容: 我有一个映射有以下注释的控制器: 我返回了一个有效的JSON字符串,但是,当我在浏览器中的Chrome Dev Tools上查看响应时,内容类型不是唯一的。为什么未设置内容类型? 我的: 我的: 使用WildFly 8.1作为我的应用服务器。 问题答案: 要了解的第一件事是,在元素 仅用于限制请求处理程序的映射。 它什么也没做。 然后,假设您的方法的返回类型为,并带有注释,则将通过处理