http सामग्री प्रकार को कैसे सेट करें और कोण प्राप्त करने में त्रुटि 415 असमर्थित मीडिया प्रकार




service angular (2)

सामग्री प्रकार कैसे सेट करें और कोण 2 में स्वीकार करें?

मैं शीर्ष लेख में सामग्री प्रकार (एप्लिकेशन / जेएसएन) के साथ डाक कॉल भेजने की कोशिश कर रहा हूं, लेकिन किसी कारण से यह नहीं भेजता है, यह हमेशा पाठ / सादा भेजता है; सामग्री प्रकार में वर्णसेट = यूटीएफ -8 मैं 415 असमर्थित मीडिया प्रकार प्राप्त कर रहा हूं जब मैं एक आरईएसटी सेवा कॉल करने का प्रयास करता हूं। मुझे लगता है कि मुझे टाइप और कंटेंट-प्रकार ठीक से सेट करना है, किसी तरह यह कोड से सेट नहीं होता है जो कि हम के लिए हैडर अनुरोध के नीचे

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/angular2 से गलत आयात का उपयोग कर रहे हैं अब angular2 अब बीटा में है, इसलिए लगभग सभी आयात बदल दिए गए हैं। आयात की सभी सूची के लिए इस जवाब को पढ़ें।

https://.com/a/34440018/5043867

तो मेरी समझ के लिए, आप REST एपीआई का उपयोग करते हुए पोस्ट अनुरोध पर कॉल करना चाहते हैं मुझे लगता है कि आप content type='application/json' भेजना चाहते हैं, तो आपको इसे Header जोड़कर भेजना होगा I सामग्री प्रकार नीचे की तरह

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

PostRequest(url,data) {
        this.headers = new Headers();
        this.headers.append("Content-Type", 'application/json');
        this.headers.append("Authorization", 'Bearer ' + localStorage.getItem('id_token'))

        this.requestoptions = new RequestOptions({
            method: RequestMethod.Post,
            url: url,
            headers: this.headers,
            body: JSON.stringify(data)
        })

        return this.http.request(new Request(this.requestoptions))
            .map((res: Response) => {
                if (res) {
                    return [{ status: res.status, json: res.json() }]
                }
            });
}

मैं विधि नाम के रूप में PostRequest का उपयोग कर डमी उदाहरण मान रहा हूं। HTTP और REST API कॉल के बारे में अधिक जानकारी के लिए यहां देखें: https://.com/a/34758630/5043867


यहां एक क्लीनर तरीका है, जो अंगुल्य 2 डॉक्स ( 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 क्वेरी के लिए आवश्यक है





angular