http - 如何在 angular2 中设置内容类型和接受错误 415 不支持的媒体类型

标签 http service angular

如何在angular2中设置Content-Type和Accept?

我正在尝试在 header 中发送内容类型为 (application/json) 的 post 调用 但由于某种原因它不发送,它总是发送文本/纯文本;内容类型中的 charset=UTF-8 当我尝试调用 REST 服务时收到 415 Unsupported Media Type。我想我需要以某种方式正确设置类型和内容类型,它不是从代码中设置的 我喜欢什么 下面是 header 请求

Accept  
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding 
gzip, deflate
Accept-Language 
en-US,en;q=0.5
Content-Length  
13
Content-Type    
text/plain; charset=UTF-8
Host    
enrova.debug-zone.com:8000
Origin  
http://localhost:8000
Referer 
http://localhost:8000/add
User-Agent  
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0

代码如下

    import {Component, View} from 'angular2/angular2';
    import { Inject} from 'angular2/di';
    import {Http} from 'angular2/http';

    export class AchievementsService {
        constructor( @Inject(Http) private http: Http) {        
        }

        getAchievementsOfType(type: string) : any {
            var path = '/api/achievements/' + type;
            return this.http.get(path);
        }

        getAllAchievements() : any {
            var path = '/api/achievements';
            return this.http.get(path);
        }

        addAnAchievement(newAchievement) {

            //var path = '/api/achievements';
            var path = 'http://test.com:8000/branch';
            return this.http.post('http://test.com:8000/branch', JSON.stringify(newAchievement),{
            headers: { 'Content-Type': 'application/json; charset=utf-8'}  });

    }

**Calling Class**


 import {Component, View} from 'angular2/angular2';
    import { _settings } from '../../settings'
    import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms';
    import {Inject} from 'angular2/di';
    import {Router} from 'angular2/router';
    import {AchievementsService} from '../../services/achievementsService';

    @Component({
      selector: 'add',
      injectables: [FormBuilder]
    })
    @View({
      templateUrl: _settings.buildPath + '/components/add/add.html',
      directives: [formDirectives]
    })
    export class Add {
      addAchievementForm: any;

      constructor( @Inject(FormBuilder) private formBuilder: FormBuilder,
        @Inject(Router) private router: Router,
        @Inject(AchievementsService) private achievementsService: AchievementsService) {

        this.addAchievementForm = formBuilder.group({
            name: ['']

        });
      }
    // This is the funtion that call post call written in achievementsService.ts
      addAchievement() {
        this.achievementsService.addAnAchievement(this.addAchievementForm.value)
          .map(r => r.json())
          .subscribe(result => {
            this.router.parent.navigate('/');
          });


      }
    }

最佳答案

这是一个更简洁的方法,它写在 Angular2 文档中(https://angular.io/docs/ts/latest/guide/server-communication.html)。

import {Headers, RequestOptions} from 'angular2/http';

let body = JSON.stringify({ 'foo': 'bar' });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });

return this.http.post(url, body, options)
                .map(res =>  res.json().data)
                .catch(this.handleError)

请注意,我认为这仅适用于 POST 查询。

关于http - 如何在 angular2 中设置内容类型和接受错误 415 不支持的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665358/

相关文章:

angular - 我如何知道 html 组件的翻译文件中的某个元素是否为空?

javascript - Angular 6 - 从 app.component.html 中删除数据并更新 View 中的更改

angularjs - 如何在 AngularJS 中加载 http 请求之前禁用按钮?

macos - "Ad-hoc webserver"用于 UNIX/MacOSX 上的静态文件?

HTTP 和嵌套对象 (Angular2 RC1 + TS)

android - 如何确定下载的 HTML 源代码来自特定网站?

c++ - 无法使用 C++ 中的 Windows 服务检索可移动设备上的数据

android - Activity轮换导致服务被杀死

c# - 我应该使用什么技术来允许我的 Windows 服务或 Web 服务(用 C# 编写)发布它的进度和状态?

json - 使用本地 JSON 文件导入时找不到模块