2017-09-27 4 views
1

각도에서 httpGet 유형의 웹 서비스 api를 호출하고 CopiadoraBusquedaModel 유형의 매개 변수를 보내고 서비스에서 CopiadoraBusqueda 유형의 매개 변수를 검색하지만 서비스에서 매개 변수를 확인하면 웹 API의 경우 값은 null입니다. 각도에서 모델이 C#의 개체와 일치하는지 확인할 수있었습니다. 어떤 아이디어?웹 서비스를 호출 할 때 angular2에서 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

시도는 다음과 같이 GetListadoCopiadorasByFiltro 기능에 [FromUri] 속성을 추가합니다 : 이것은 URL에서 매개 변수를 얻을 수 WebApi을 강제

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

. 여기에 관한 좋은 글이 있습니다 : https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

+0

감사합니다. vzayko, [FromUri] 속성을 추가했지만 속성이 비어 있습니다. 다른 것을 넣어야합니까? – ararb78

+0

필드 매핑이 가능합니다. CopiadoraBusqueda.cs에서 속성 (예 : CodigoCopiadora)을 JS와 동일한 사례 (예 : codigoCopiadora)로 변경하고 다시 테스트 해 봅니다. 이 값을 얻으려면 나머지는 동일하게하십시오. 또한 JS에서와 같이 DataMember 이름을 지정할 수 있습니다. 행운을 빕니다! – vzayko

+0

나는 C# 클래스 "CopiadoraBusqueda.cs"및 모델 "copiadorabusquedamodel.ts"에서 속성 CodigoCopiadora를 변경하고이 속성 만 사용합니다. 다른 속성은 주석 처리했지만 값은 null이며 웹 API 메서드는 사용하지 않습니다. "listadocompiadoras.service.ts"파일의 "getListadoCopiadorasByFiltro"메소드가 올바르게 구현되었는지, – ararb78

0

안녕하세요. [FromUri]를 사용하고 싶다면 vzayko가 말했듯이, URL에 매개 변수를 전달해야합니다. 이렇게하려면 클라이언트 코드를 변경해야합니다.

귀하의 URL이 API를 같은 모양해야/copiadoras/GET/listadoCopiadorasByFiltro? CodigoCopiadora = 0000 & NumeroSerie = XXXXX & NumeroInventario = 12345

이없는 매개 변수에 대한 지원은 바인딩 - 박스 아웃의 헤더 데이터. 그러나 HttpParameterBinding을 구현할 수는 있습니다. 이 예제를 볼 수 있습니다 here