Angular 角度4 odata删除/发布不工作

Angular 角度4 odata删除/发布不工作,angular,odata,angular-services,Angular,Odata,Angular Services,我创建了一个简单的测试类,用于向ODataAPI发出http请求(两者都在本地机器上运行,启用了CORs)。我的OData服务看起来是这样的: import { Injectable } from '@angular/core'; import { Http, Response, RequestOptionsArgs, Headers } from '@angular/http'; import { Observable } from 'rxjs'; import 'rxjs/add/ope

我创建了一个简单的测试类,用于向ODataAPI发出http请求(两者都在本地机器上运行,启用了CORs)。我的OData服务看起来是这样的:

import { Injectable } from '@angular/core';

import { Http, Response, RequestOptionsArgs, Headers } from '@angular/http';

import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';

import { IUrlOptions } from './odata.model';
import { RequestTypes } from './odata.model';

@Injectable()
export class ODataService {

    constructor(
        private host: string,
        private http: Http
    ) {  }


    private constructUrl(urlOptions: IUrlOptions): string {
        return this.host + urlOptions.restOfUrl;
    }



    //T specifies a generic output of function
    public Request<T>(requestType: RequestTypes, urlOptions: IUrlOptions, body?: any, options?: RequestOptionsArgs) : Observable<T> {
        let response: Observable<Response>;

        if(requestType == RequestTypes.delete){
            response = this.http.delete(this.constructUrl(urlOptions), options);
        } else if(requestType == RequestTypes.get){

            response = this.http.get(this.constructUrl(urlOptions), options);
        } else if (requestType == RequestTypes.post){
            response = this.http.post(this.constructUrl(urlOptions), body, options)
        }

        return response.map((res) => <T>res.json());
    }
}

任何帮助都将不胜感激

这最终成为标题/CORs问题。 我执行了以下步骤来修复它:

  • 在我的请求中添加了以下标题:
  • 然后,我还必须在我的ODataAPI服务器上公开标题,因为Chrome和其他较新的浏览器会执行一些“飞行前”操作,发送选项请求(了解更多信息)。为此,我在我的WebApiConfi.cs中添加了以下内容:
  • 这将在所有控制器上启用CORS,您可以在上面链接中提到的单个控制器或方法上指定它

    import { Component, OnInit } from '@angular/core';
    
    import { ODataService } from './odata.service';
    import { RequestTypes } from './odata.model';
    import { IUrlOptions } from './odata.model';
    
    import  { Template } from '../../models/template.model' 
    
    @Component({
        selector: 'odata',
        templateUrl: 'odata.component.html'
    })
    export class ODataComponent implements OnInit {
    
    
        public requestResult: any;
    
        constructor(
            private odata: ODataService
        ) { }
    
        ngOnInit() { }
    
        testGet() {
            let urlOptions: IUrlOptions = <IUrlOptions>{};
            urlOptions.restOfUrl = "Template";
            this.odata.Request(RequestTypes.get, urlOptions).subscribe(
                data => this.requestResult = data,
                error => alert(error)
            );
        }
    
        testPost() {
            let urlOptions: IUrlOptions = <IUrlOptions>{};
            urlOptions.restOfUrl = "Template";
            let body = new Template();
            body.Name = "Test3";
            body.Private = false;
            body.User = "chp";
    
            let jsonBody = JSON.stringify(body);
    
            this.odata.Request(RequestTypes.post, urlOptions, jsonBody).subscribe(
                data => this.requestResult = data,
                error => alert(error)
            );
        }
    
        testPut() {
            let urlOptions: IUrlOptions = <IUrlOptions>{};
            this.odata.Request(RequestTypes.put, urlOptions).subscribe(
                data => this.requestResult = data,
                error => alert(error)
            );
        }
    
        testPatch() {
            let urlOptions: IUrlOptions = <IUrlOptions>{};
            this.odata.Request(RequestTypes.patch, urlOptions).subscribe(
                data => this.requestResult = data,
                error => alert(error)
            );
        }
    
        testDelete() {
            let urlOptions: IUrlOptions = <IUrlOptions>{};
            urlOptions.restOfUrl = "Template(6)"
            this.requestResult = this.odata.Request(RequestTypes.delete, urlOptions);
        }
    
    }
    
    DELETE http://localhost:53219/Template(6) HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: application/json
    Content-Length: 83
    Host: localhost:53219
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
    
    let headers = new Headers();
    headers.append("OData-Version","4.0");
    headers.append("Content-Type","application/json;odata.metadata=minimal");
    headers.append("Accept","application/json");
    return headers;
    
     var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*", exposedHeaders: "*");
                config.EnableCors(cors);