문제

지난달에 대해서는 잘못된 REST 서비스가 서비스 스택으로 호출되는 이상한 동작을 발견했습니다.

모든 것이 작동하는 것처럼 보이고 새로운 REST 서비스를 추가하는 것으로 보이는 경우, 일부 작업 휴식 서비스가 올바르게 작동하지 않는지 (즉, 잘못된 REST 서비스가 호출됩니다).

나는 왜 문제가되는 이유를 설명 할 수있는 서비스에 대한 데이터 acactract를 어떻게 갖추고 있는지 설명 할 것입니다.

처음에는 다음과 같습니다.

[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}", "GET", "application/xml")]
public class GetServiceDto
{
    [DataMember(Name = "SessionId", Order = 1)]
    public string SessionId { get; set; }
    [DataMember(Name = "UserName", Order = 2)]
    public string UserName { get; set; }
    [DataMember(Name = "ServiceName", Order = 3)]
    public string ServiceName { get; set; }
}
.

와 같은 데이터 (SessionID, 사용자 이름 및 ServiceName)를 전달했을 때 다음과 같이 새 서비스가 시작되었습니다.

[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")]
public class GetTunersDto : GetServiceDto
{
}
.

이 모든 것이 잘 작동했지만 "API / V1 / DVB / {ServiceName}"API / V2 / DVB / {ServiceName} / TUNERS "라는"API / V1 / DVB / {ServiceName} "라고 불리는 새 서비스를 추가했을 때 호출됩니다.

i :

를 가지고 있도록 상속 된 관계를 제거했습니다.
[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")]
public class GetDvbConfigTunersDto
{
    [DataMember(Name = "SessionId", Order = 1)]
    public string SessionId { get; set; }
    [DataMember(Name = "UserName", Order = 2)]
    public string UserName { get; set; }
    [DataMember(Name = "ServiceName", Order = 3)]
    public string ServiceName { get; set;}
}
.

지금 잘 작동합니다.

이상한 것은 괜찮은 것입니다. 나중에 잘못된 매핑이 발생하는 나중에 새로운 서비스를 추가했을 때만

아이디어가 있습니까?

도움이 되었습니까?

해결책

서비스 당 1 개의 요청 DTO 만 가질 수 있으며 요청 DTO는 getTunersdto 과 동일한 경로를 상충 할 수있는 서비스 모두를 채우는 과 동일한 경로를 상속하는 속성 경로를 상속합니다.모호한 경로.

DTOS (특히 DTOS 요청)에 대한 상속을 사용하지 않는이 해결책은 사용하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top