正确添加HttpClient PUT参数的方法? - 将TypeScript REST调用移植到C#

时间:2016-11-23 15:41:30

标签: c# rest typescript

我将TypeScript应用程序部分移植到C#。应用程序需要在Web服务上执行某个REST调用。 Web服务是用C#编写的,具体方法具有以下签名:

public async Task<IHttpActionResult> RegisterDevice(DeviceRegistration deviceRegistration)

原始应用程序(TypeScript)以下列方式进行REST调用:

this.$http.put(this.Configuration.registrationEndpointUrl, {
    field1: value1,
    field2: value2,
    field3: value3
})

我搜索了StackOverflow如何进行调用,并找到了解释如何执行此操作的帖子。然后我在C#版本中创建了以下内容:

var pairs = new List<KeyValuePair<string, string>>() {
     new KeyValuePair<string, string>("field1", Settings.Value1),
     new KeyValuePair<string, string>("field2", Settings.Value2),
     new KeyValuePair<string, string>("field3", "value3")
};
var content = new FormUrlEncodedContent(pairs);
var response = await Client.PutAsync(Configuration.RegistrationUrl, content);

然而,这只会返回一个空响应。我认为FormUrlEncodedContent出了问题?在C#中进行此调用的正确方法是什么?

编辑:客户端初始化代码:

private static async Task<HttpClient> CreateClient() {
     await Authenticator.VerifyAuthentication();
     var client = new HttpClient();
     client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Add("x-zumo-auth", Settings.OAuthToken);
    client.DefaultRequestHeaders.Add("x-oauth-provider", Settings.OAuthProvider.Value.ToString());
    return client;
}

1 个答案:

答案 0 :(得分:1)

而不是使用方法

var response = await Client.PutAsync(Configuration.RegistrationUrl, content);

您可以使用此

var response = await Client.PutAsJsonAsync(Configuration.RegistrationUrl, content);