Angular 2,Http 和 Not setting Content-Type "application/json"
Angular 2,Http 和 Not setting Content-Type "application/json"
我正在尝试使用Angular 2(2.0.0-rc.1)在服务中编写一个简单的Check Login方法。当我尝试将content-type设置为application/json时,发送到我的Web API后端时它从未设置头部。
import { Injectable } from '@angular/core'; import { HTTP_PROVIDERS, Http, Response, Headers, RequestOptionsArgs, RequestMethod, Request, RequestOptions } from '@angular/http'; import { Observable } from 'rxjs/Rx'; import { Other Modules Left out for Security } from 'Hidden'; @Injectable() export class LoginService { private _http: Http; constructor(http: Http) { this._http = http; } CheckLogin(model: CredentialModel) { let url = 'http://localhost:51671/api/Login'; let data = JSON.stringify(model); let headers = new Headers(); headers.append('Content-Type', 'application/json'); headers.append('Accept', 'application/json'); let requestOptions = new RequestOptions({ method: RequestMethod.Post, url: url, headers: headers, body: data }); console.log(requestOptions); console.log(data); return this._http.post(url, data, requestOptions); } }
来自Web API的请求
OPTIONS /api/Login HTTP/1.1
Host: localhost:51671
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:5616
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2754.0 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
DNT: 1
Referer: http://localhost:5616/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
使用PostMan使用完全相同的数据可以正常工作!看起来在Angular 2中使用POST方法发送application/json存在问题。
任何有助于解决此问题的帮助都将非常有用。愿意尝试任何建议。
Angular 2中,当使用Http进行POST请求时,如果不设置Content-Type为"application/json",可能会出现问题。下面将详细介绍问题的原因以及解决方法。
问题的原因:
在Angular 2中,当使用Http进行POST请求时,如果不设置Content-Type为"application/json",默认的Content-Type为"application/x-www-form-urlencoded"。这可能导致服务器无法正确解析请求的数据。
解决方法:
为了解决这个问题,需要手动设置请求的Headers,将Content-Type设置为"application/json"。以下是具体的解决方法:
1. 首先,在Angular 2中,需要使用HttpHeaders类来创建Headers对象。我们可以通过指定键值对的形式来设置Headers的内容。
let headers = new HttpHeaders({ "Content-Type": "application/json", "Accept": "application/json" });
这里我们设置了两个Headers,一个是Content-Type,值为"application/json",另一个是Accept,值也为"application/json"。这样设置后,我们就可以确保请求的数据以JSON格式发送,并且告诉服务器我们希望接收的响应数据也是JSON格式。
2. 接下来,我们需要在进行POST请求时,将设置好的Headers传递给Http请求的options参数。
this.http.post("apiUrl", data, {headers: headers})
在这个例子中,我们使用了this.http.post方法进行POST请求。其中,"apiUrl"是我们要请求的API的URL,data是要发送的数据,{headers: headers}是请求的options参数,我们将设置好的Headers传递给了options参数。
通过以上的设置,我们就可以确保在Angular 2中使用Http进行POST请求时,正确设置了Content-Type为"application/json",解决了可能出现的问题。
希望本文对你理解Angular 2中Http请求设置Content-Type为"application/json"的问题有所帮助。
在Angular 2中,可以使用RequestOptionsArgs
接口来指定RequestOptions
的值。
当我们使用Angular 2的Http
模块发送HTTP请求时,有时候可能会遇到一个问题,即在不设置Content-Type
为"application/json"
的情况下,无法正确解析HTTP请求的问题。
这个问题的出现原因是,Http
模块默认将请求的Content-Type
设置为"application/json"
。如果我们不手动设置Content-Type
,那么服务器在接收到请求时可能无法正确解析请求的内容。
解决这个问题的方法是,我们需要手动设置请求的Content-Type
为"application/json"
。
以下是一个示例代码,展示了如何手动设置Content-Type
为"application/json"
:
import { Http, Headers, RequestOptions } from '@angular/http'; // 创建请求头 let headers = new Headers({ 'Content-Type': 'application/json' }); // 创建请求参数 let options = new RequestOptions({ headers: headers }); // 发送请求 http.post(url, data, options) .subscribe( response => { // 处理响应 }, error => { // 处理错误 } );
通过以上代码,我们创建了一个Headers
对象,并将Content-Type
设置为"application/json"
。然后,我们将这个Headers
对象传递给RequestOptions
对象,并将RequestOptions
对象传递给http.post
方法,以发送带有正确Content-Type
的HTTP请求。
通过手动设置Content-Type
为"application/json"
,我们解决了在使用Angular 2的Http
模块发送HTTP请求时无法正确解析请求的问题。