RestSharp에서 요청 본문에 텍스트를 추가하는 방법


103

RestSharp를 사용하여 웹 서비스를 사용하려고합니다. 지금까지 모든 것이 잘 진행되었지만 (John Sheehan과 모든 기여자들에게 환호합니다!)하지만 저는 걸림돌에 부딪 혔습니다. 이미 직렬화 된 형식 (즉, 문자열)으로 RestRequest 본문에 XML을 삽입하고 싶다고 가정 해 보겠습니다. 이 작업을 수행하는 쉬운 방법이 있습니까? .AddBody () 함수가 뒤에서 직렬화를 수행하므로 내 문자열이 <String />.

어떤 도움이라도 대단히 감사합니다!

편집 : 현재 코드 샘플이 요청되었습니다. 아래 참조-

private T ExecuteRequest<T>(string resource,
                            RestSharp.Method httpMethod,
                            IEnumerable<Parameter> parameters = null,
                            string body = null) where T : new()
{
    RestClient client = new RestClient(this.BaseURL);
    RestRequest req = new RestRequest(resource, httpMethod);

    // Add all parameters (and body, if applicable) to the request
    req.AddParameter("api_key", this.APIKey);
    if (parameters != null)
    {
        foreach (Parameter p in parameters) req.AddParameter(p);
    }

    if (!string.IsNullOrEmpty(body)) req.AddBody(body); // <-- ISSUE HERE

    RestResponse<T> resp = client.Execute<T>(req);
    return resp.Data;
}

현재 코드는 어떻게 생겼습니까? 그리고 어디에 문제가 있습니까?
Oded

2
죄송합니다. 지금까지 보지 못했습니다. 아마도 AddParameter ()를 원할 것입니다. 그것이 당신이 원하는 것이 아니라면, 당신이 달성하려는 params + xml을 가진 본문의 예와 함께 Google 그룹에 게시하십시오. groups.google.com/group/restsharp
John Sheehan

답변:


215

요청 본문에 일반 xml 문자열을 추가하는 방법은 다음과 같습니다.

req.AddParameter("text/xml", body, ParameterType.RequestBody);


34
+1 마찬가지로 일반 JSON을 추가하려면 req.AddParameter ( "text / json", body, ParameterType.RequestBody);
Paul Prewett

49
사실, Json의 경우 (최소한 Rails의 경우) : 여기req.AddParameter("application/json", body, ParameterType.RequestBody); 에 팁을 주신 Jean Hominal에게 감사드립니다
MrWater

1
이것을 HTML로 인코딩 된 문자열로 설정하는 방법은 무엇입니까? 즉 큰 GET 발 = 2을 val2 = 3 등
마이크 제임스

4
req.AddParameter ( "application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
최신 버전의 RestSharp를 사용하고 있으며이 메서드 서명을 사용할 수 없습니다.
jrahhali

6

@dmitreyg의 답변에 추가하고 @jrahhali의 답변에 대한 의견을 추가하려면 현재 버전에서 이것이 게시되는 시점을 기준으로 v105.2.3구문은 다음과 같습니다.

request.Parameters.Add(new Parameter() { 
    ContentType = "application/json", 
    Name = "JSONPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = jsonBody
});

request.Parameters.Add(new Parameter() { 
    ContentType = "text/xml", 
    Name = "XMLPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = xmlBody
});

1
나는 이것을 시도했지만 Name 매개 변수에 설정 한 것은 실제로 content-Type으로 설정됩니다. 그래서 ContentType과 Name 모두 "application / json"을 사용했습니다.
Thangadurai

나는 이것을 시도하고 rest # 내에서 null 참조 예외가 발생했습니다. stackoverflow.com/a/44281853/109736
JasonCoder 19

@JasonCoder의 의견에 감사드립니다. v105.2.3도 같은 버전입니까? 나중 버전과 혼합 된 결과가 있었기 때문에 내가 묻는 이유입니다. 지금은 동일하게 작동하지 않을 수있는 106에 있습니다.
흥미로운 이름 여기에

@GibralterTop 내 결과는 106.6.9
JasonCoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.