I've been stuck on a GraphQL problem for a few days now. I have this function in my mutation class
C# Server side:
public WebServiceDTO UpdateWebService(WebServiceDTO req){}
public class MutationType : ObjectType<Mutation>
{
protected override void Configure(IObjectTypeDescriptor<Mutation> descriptor)
{
descriptor.Field(m => m.UpdateWebService(default)).Type<NonNullType<WebServiceType>>()
.Argument("req", arg => arg.Type<WebServiceInputType>()).Name("UpdateWebService");
descriptor.Field(m => m.RemoveWebService(default)).Type<NonNullType<StringType>>()
.Argument("id", arg => arg.Type<NonNullType<IdType>>()).Name("RemoveWebService");
}
}
public class WebServiceInputType : InputObjectType<WebServiceDTO>
{
protected override void Configure(IInputObjectTypeDescriptor<WebServiceDTO> descriptor)
{
descriptor.Field(x => x.WebServiceId).Type<NonNullType<IdType>>();
descriptor.Field(x => x.Name).Type<NonNullType<StringType>>();
descriptor.Field(x => x.Delay).Type<IntType>();
descriptor.Field(x => x.Bundle).Type<BooleanType>();
descriptor.Field(x => x.KeepSequence).Type<BooleanType>();
descriptor.Field(x => x.RetryCount).Type<IntType>();
descriptor.Field(x => x.RetryDelay).Type<IntType>();
descriptor.Field(x => x.HistoryHours).Type<IntType>();
descriptor.Field(x => x.Enabled).Type<BooleanType>();
descriptor.Field(x => x.Instant).Type<BooleanType>();
descriptor.Field(x => x.DestinationId).Type<StringType>();
descriptor.Field(x => x.WebServiceGroupId).Type<StringType>();
descriptor.Field(x => x.ElementIds).Type<ListType<StringType>>();
descriptor.Field(x => x.CallIds).Type<ListType<StringType>>();
}
}
Postman:
C# client:
public async Task<WebServiceDTO> UpdateWebServiceGraph(WebServiceDTO webService)
{
var graphQLClient = new GraphQLHttpClient("http://localhost:81/graphql", new NewtonsoftJsonSerializer());
var query = @"
mutation UpdateWebService($req: WebServiceDTOInput!) {
UpdateWebService(req: $req) {
webServiceId
name
delay
bundle
keepSequence
retryCount
retryDelay
historyHours
enabled
instant
destinationId
webServiceGroupId
elementIds
callIds
}
}";
var variables = new
{
req = webService
};
var request = new GraphQLRequest
{
Query = query,
Variables = variables
};
try
{
var response = await graphQLClient.SendMutationAsync<WebServiceDTO>(request);
}catch(Exception ex)
{
var iets = ex;
}
return webService;
}
EDITED:
I changed my query and it does work now, i don't know why it failed before.
public async Task<WebServiceDTO> UpdateWebServiceGraph3(WebServiceDTO webService)
{
var graphQLClient = new GraphQLHttpClient("http://localhost:81/graphql", new NewtonsoftJsonSerializer());
var mutation = @"
mutation {
UpdateWebService(req: {
webServiceId: """ + webService.WebServiceId + @""",
name: """ + webService.Name + @""",
delay: " + webService.Delay + @",
bundle: " + webService.Bundle.ToString().ToLower() + @",
keepSequence: " + webService.KeepSequence.ToString().ToLower() + @",
retryCount: " + webService.RetryCount + @",
retryDelay: " + webService.RetryDelay + @",
historyHours: " + webService.HistoryHours + @",
enabled: " + webService.Enabled.ToString().ToLower() + @",
instant: " + webService.Instant.ToString().ToLower() + @",
destinationId: """ + webService.DestinationId + @""",
webServiceGroupId: """ + webService.GroupId + @""",
elementIds: [" + string.Join(",", webService.ElementIds.Select(id => "\"" + id + "\"")) + @"],
callIds: [" + string.Join(",", webService.CallIds.Select(id => "\"" + id + "\"")) + @"]
}) {
webServiceId
name
delay
bundle
keepSequence
retryCount
retryDelay
historyHours
enabled
instant
destinationId
webServiceGroupId
elementIds
callIds
}
}";
var request = new GraphQLRequest
{
Query = mutation
};
var response = await graphQLClient.SendMutationAsync<WebServiceDTO>(request);
return response.Data;
}
Can someone explain me what i'm doing wrong? thanks, tom
I managed to update my webservice with postman and tried to call the endpoint the same way in my c# client, but it keeps failing.