【问题标题】:Angular 2 - POST does not set Content-Type to application/json (its text/plain)Angular 2 - POST 未将 Content-Type 设置为 application/json (其文本/纯文本)
【发布时间】:2017-02-20 03:35:35
【问题描述】:

我创建了一个 Contactformular,我的模拟服务器正在工作,但在 Angular 2 中,有我的 Create-function:

createPatient(Name: string, Nachname: string, Geburtsdatum: string, Strasse: string, Hausnummer: string, Postleitzahl: string, Wohnort: string): Observable<boolean> {
  let patient = {
      Id: 0,
      Name: Name,
      Nachname: Nachname,
      Geburtsdatum: Geburtsdatum,
      Strasse: Strasse,
      Hausnummer: Hausnummer,
      Postleitzahl: Postleitzahl,
      Wohnort: Wohnort
  };
  let body = JSON.stringify(patient);
  let headers = new Headers({ 'Content-Type': 'application/json' });
  let options = new RequestOptions({ headers: headers });
  return this.http.post(this.patientenUrl + "CreatePatient", body, options)
    .map((r: Response) => {
        console.log(r);
        return <boolean>r.json();
    });

Url 中不涉及正文,因此我的“服务器”不起作用。我在哪里失败了?

我总是得到:

选项 http://localhost:9177/api/v1/CreatePatient XMLHttpRequest 无法加载 http://localhost:9177/api/v1/CreatePatient。预检响应具有无效的 HTTP 状态代码 415 例外:响应状态:0 对于 URL:null 未捕获的响应,状态为:0 对于 URL:null

经过一些帮助,我得到了这个解决方案:

createPatient(名称:字符串,Nachname:字符串,Geburtsdatum:字符串,Strasse:字符串,Hausnummer:字符串,Postleitzahl:字符串,Wohnort:字符串):Observable { 让病人 = { 编号:0, 姓名:姓名, 姓名:姓名, Geburtsdatum:Geburtsdatum, 施特拉斯:施特拉斯, 豪斯纳默尔:豪斯纳默尔, 波斯特莱扎尔:波斯特莱扎尔, 沃诺特:沃诺特 }; 让 body = JSON.stringify(耐心); let headers = new Headers({ 'content-type': 'application/json', 'accept': 'application/json'}); let options = new RequestOptions({ headers: headers }); 返回 this.http.post(this.patientenUrl + "CreatePatient", body, headers) .map((r: 响应) => { 控制台.log(r); 返回 r.json(); });

现在我得到了我的身体,但 Content-Type 是“text/plain” 所以现在我总是得到:

POST http://localhost:9117/api/v1/CreatePatient 415(不支持的媒体类型) 例外:状态响应:415 URL 的媒体类型不受支持:http://localhost:9117/api/v1/CreatePatient 未捕获的响应状态:415 URL 的媒体类型不受支持:http://localhost:9117/api/v1/CreatePatient

用于创建的控制器功能:

[路线(“[动作]”)] [HttpPost] public JsonResult CreatePatient([FromBody]Patient 患者) { this.ResStatus.Status = false; var pat = 患者; var ida = GetId(); //Prüfung ob Customer Leer oder Null pat.Id = (int)ida; 患者存储库.插入(pat); this.ResStatus.Status = true; 返回 Json(this.ResStatus.Status); }

我解决了问题: 我将 ASP.NET Core 中的 wwwroot 更改为 Angular 2 项目,并包含 index.html 中的链接,我可以毫无问题地刷新它。

【问题讨论】:

  • 你是什么意思 body 不涉及到 URL ?正文是 HTTP 请求正文。使用您的浏览器开发工具检查它。问题可能出在您的服务器上。
  • 我检查了服务器,但一切正常,我的身体在返回中不存在,我的意思是如果我发送 post_request 我在谷歌浏览器中调试并且我没有身体。

标签: angular http-post


【解决方案1】:

你为什么要 JSON.stringify 你的“身体”?你不必这样做,它应该在没有 JSON.stringify() 的情况下工作

--

我的意思是你应该发送“患者”或发送“身体 = 患者;”然后发送正文。

【讨论】:

  • 您是否使用浏览器中的开发工具来查看实际发送的请求?您是否在 REST 服务中看到您的请求触发了 POST 请求处理?
  • to 1. 问题:是的,我们看到请求已建立并已发送
  • 但我们看到他使用错误代码 415 Unsupported Media type
  • 你使用 Spring 吗?在我看来,您的控制器不接受您发送的媒体类型。 @RequestMapping 在方法上说了什么?
  • 我测试了我的创建函数,它工作正常,但是 Angular 中的帖子不发送应用程序/json,它发送文本/纯文本
【解决方案2】:
addBookWithObservable(book:Book): Observable<Book> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, book, options)
           .map(this.extractData)
           .catch(this.handleErrorObservable);

https://www.concretepage.com/angular-2/angular-2-http-post-example

【讨论】:

  • 否则请安装cors
猜你喜欢
  • 2016-10-02
  • 2012-05-22
  • 2018-01-26
  • 2018-03-11
  • 2020-02-18
  • 2011-12-25
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多