簡體   English   中英

從angular2調用Web服務api http

[英]calling a web service api http from angular2

我正在調用類型為httpGet的Web服務api,從angular向其發送類型為CopiadoraBusquedaModel的參數,並且該服務檢索類型為CopiadoraBusqueda的參數,但是當我在服務Web API上檢查de parameter時,該值為null。 我已經能夠檢查角度模型是否與C#對象匹配。 有任何想法嗎?

copiadorabusquedamodel.ts:

 export class CopiadoraBusquedaModel {
 public codigoCopiadora: string;
 public numeroSerie: string;
 public numeroInventario: string;
 public nombrePersonaEncargada: string;
 public idCliente: number;
 public idContrato: number;
 public idProveedor: number;
 public idMarca: number;
 public idModelo: number;
 public fechaInstalacion: string;
 public fechaFinFacturacion: string;  
 }

服務

import { Http, RequestOptions, Headers} from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { ListadoCopiadorasModel } from '../../models/listadocopiadoras.model';
import { CopiadoraBusquedaModel } from '../../models/copiadorabusqueda.model';

@Injectable()
export class ListadoCopiadorasService {
headers: Headers;
options: RequestOptions;

private url: any;
// La variable data cachea los datos del servicio.
private data: any;
constructor (private _http: Http) {}

 getListadoCopiadorasByFiltro(CopiadoraBusqueda : CopiadoraBusquedaModel): Observable<ListadoCopiadorasModel[]> {
    this.url = 'api/copiadoras/get/listadoCopiadorasByFiltro';
    this.headers = new Headers({'Content-Type': 'application/json','Accept': 'q=0.8;application/json;q=0.9'});

    //this.options = new RequestOptions({ headers: this.headers, params: { 'filtro': JSON.stringify(CopiadoraBusqueda) } });
    this.options = new RequestOptions({ headers: this.headers, params: { 'filtro': CopiadoraBusqueda } });
    // Si la variable data está vacía se llama al servicio.
    // Si tiene datos, se devuelve la variable como observable.
    if (!this.data) {
        return this._http.get(this.url, this.options)
            .map((response: any) =>
                response.json() as ListadoCopiadorasModel[])
            .do(data => this.data = data);
    } else {
        return Observable.of(this.data)
            .map((response: any) =>
                response as ListadoCopiadorasModel[]);
    }
}

Copiadoras.Controller.cs://一些東西...

[ScriptService]
[RoutePrefix("api/copiadoras")]
public class CopiadorasController: ApiController
{

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
[Route("get/listadoCopiadorasByFiltro")]
[HttpGet]
public IEnumerable<Copiadora> GetListadoCopiadorasByFiltro(CopiadoraBusqueda filtro)
{
  IEnumerable<Copiadora> listadoCopiadoras = null;    
  using (var servicioCopiadoras = new ServicioCopiadoraClient())
  {
    listadoCopiadoras = servicioCopiadoras.ObtenerCopiadorasByFiltro(filtro);
  }

  return listadoCopiadoras.AsEnumerable();
}

CopiadoraBusqueda.cs:

  public class CopiadoraBusqueda
  {

    [DataMember]
    public string CodigoCopiadora { get; set; }

    [DataMember]
    public string NumeroSerie { get; set; }

    [DataMember]
    public string NumeroInventario { get; set; }

    [DataMember]
    public string NombrePersonaEncargada { get; set; }

    [DataMember]
    public Int32 IdCliente { get; set; }

    [DataMember]
    public Int32 IdContrato { get; set; }

    [DataMember]
    public Int32 IdProveedor { get; set; }

    [DataMember]
    public Int32 IdMarca { get; set; }

    [DataMember]
    public Int32 IdModelo { get; set; }

    [DataMember]
    public string FechaInstalacion { get; set; }

    [DataMember]
    public string FechaFinFacturacion { get; set; }
}

嘗試將[FromUri]屬性添加到GetListadoCopiadorasByFiltro函數,如下所示:

public IEnumerable<Copiadora> GetListadoCopiadorasByFiltro([FromUri]CopiadoraBusqueda filtro)

這將強制WebApi從URL獲取參數。 這是一篇關於它的好文章: https : //docs.microsoft.com/zh-cn/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

嗨,如果您想使用[FromUri],則必須按照vzayko所說的在URL中傳遞參數。 這需要更改您的客戶端代碼。

您的網址必須看起來像api / copiadoras / get / listadoCopiadorasByFiltro?CodigoCopiadora = 0000&NumeroSerie = XXXXX&NumeroInventario = 12345

沒有對標頭數據中的參數綁定的開箱即用支持。 但是,您可以實現自己的HttpParameterBinding。 你可以在這里看到一個例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM