Content-Type must be 'application/json-patch+json' JsonServiceClient ServiceStack

asked9 years ago
last updated9 years ago
viewed16.9k times
Up Vote1Down Vote

I'm trying to perform a patch with a JsonServiceClient to a service stack api as follows:

var patchRequest = new JsonPatchRequest
{
    new JsonPatchElement
    {
        op = "replace",
        path = "/firstName",
        value = "Test"
    }
};
_jsonClient.Patch<object>($"/testurl/{id}", patchRequest);

But I'm getting the following error:

Content-Type must be 'application/json-patch+json'

The error is clear. Is there a way to change the content type before perform the request for the JsonServiceClient?

This is the request POCO in the ServiceStack api:

[Api("Partial update .")]
[Route("/testurl/{Id}”, "PATCH")]
public class PartialTest : IReturn<PartialTestRequestResponse>, IJsonPatchDocumentRequest,
    IRequiresRequestStream
{
    [ApiMember(Name = “Id”, ParameterType = "path", DataType = "string", IsRequired = true)]
    public string Id { get; set; }

    public Stream RequestStream { get; set; }
}

public class PartialTestRequestResponse : IHasResponseStatus
{
    public ResponseStatus ResponseStatus { get; set; }
}

Service implementation:

public object Patch(PartialTest request)
    {
        var dbTestRecord = Repo.GetDbTestRecord(request.Id);

        if (dbTestRecord == null) throw HttpError.NotFound("Record not found.");

        var patch =
          (JsonPatchDocument<TestRecordPoco>)
              JsonConvert.DeserializeObject(Request.GetRawBody(), typeof(JsonPatchDocument<TestRecordPoco>));

        if (patch == null)
            throw new HttpError(HttpStatusCode.BadRequest, "Body is not a valid JSON Patch Document.");

        patch.ApplyTo(dbTestRecord);
        Repo.UpdateDbTestRecord(dbTestRecord);
        return new PartialTestResponse();
    }

I'm using Marvin.JsonPatch V 1.0.0 library.