2016-11-23 98 views
0

我将TypeScript应用程序部分移植到C#中。应用程序需要在Web服务上执行某个REST调用。 web服务是用C#和具体方法有以下特征:添加HttpClient PUT参数的正确方法? - 将TypeScript REST调用移植到C#

public async Task<IHttpActionResult> RegisterDevice(DeviceRegistration deviceRegistration) 

原来的应用程序(打字稿)并以下列方式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; 
} 
+0

什么是响应的状态码? – Vyrira

+0

@Vyrira BadRequest – EpicSam

回答

1

而不是使用方法

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

您可以使用此

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

'PutAsJsonAsync'方法对我来说似乎不存在。我正在使用.Net Framework 4.5,我相信应该有它? – EpicSam

+0

你的客户是HttpClient类型的? –

+0

是的,我已将客户端初始化代码添加到问题中。 – EpicSam

相关问题