2017-09-27 89 views
1

我打電話給一個類型爲httpGet的web服務api,從angular向它發送一個CopiadoraBusquedaModel類型的參數,服務檢索CopiadoraBusqueda類型的參數,但是當我檢查服務上的de參數時web API,值爲空。我已經能夠檢查來自角度的模型與來自C#的對象匹配。有任何想法嗎?從angular2調用Web服務api http

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; 
} 

service.ts

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; } 
} 

回答

0

嘗試添加[FromUri]屬性GetListadoCopiadorasByFiltro功能是這樣的:

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

這將迫使的WebAPI擺脫​​URL參數。這是一個好帖子關於它:https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

+0

謝謝vzayko,我添加[FromUri]屬性,但de屬性是空的,我必須放些別的東西? – ararb78

+0

可能是字段映射。在CopiadoraBusqueda.cs中嘗試將屬性(即CodigoCopiadora)更改爲與JS中相同的情況(即codigoCopiadora)並重新測試。如果你會得到這個價值,那麼對其餘的也一樣。此外,您可以指定它在JS中看到的DataMember名稱。祝你好運! – vzayko

+0

我在C#類「CopiadoraBusqueda.cs」和model「copiadorabusquedamodel.ts」中更改了一個屬性CodigoCopiadora,並且僅使用了這一個,我評論過的其他屬性,但是de值在web api方法中爲null,不知道「listadocompiadoras.service.ts」文件中的方法「getListadoCopiadorasByFiltro」是否正確實現, – ararb78

0

嗨,如果你想使用[FromUri]你必須通過在URL中的參數,如vzayko說。這需要更改您的客戶端代碼。

您的網址將不得不看起來像API/copiadoras/GET/listadoCopiadorasByFiltro?CodigoCopiadora = 0000 & NumeroSerie = XXXXX & NumeroInventario = 12345

沒有現成的參數支持綁定亂標題數據。但是,你可以實現你自己的HttpParameterBinding。你可以看到一個這樣的例子here