大家好
我遇到了下一个问题。我试图做一个POST请求,但当我用Visual Studio Code的调试器编译和执行它时,我得到了一个错误400 Bad Request。不管怎样,当我在Postman中做同样的POST请求时,我收到一个200 OK状态请求,其中包含继续处理下一部分所需的所有值。
此外,在请求中有一个Basic Auth,在本例中,我将其包含在Postman中,并且它工作正常。从另一方面,在我的C#脚本中,我这样执行它:
- 这是我的模型,其中包含了我的所有数据,用于将对象序列化为JSON。
public class patientMediktor{
public string deviceId { get; set; }
public string deviceType { get; set; }
public string apiVersion { get; set; }
public string language { get; set; }
public externUserClass externUser{ get;set; }
public class externUserClass{
public externUserClass(string partnerExternalId, string username, string newPassword, string gender){
this.partnerExternalId = partnerExternalId;
this.username = username;
this.newPassword = newPassword;
this.gender = gender;
}
public string partnerExternalId { get; set; }
public string username { get; set; }
public string newPassword { get; set; }
public string gender { get; set; }
}
public string includeAuthToken{ get; set; }
}
- 这是我的Helper类,用于创建POST请求。我插入所有需要的数据,然后我将对象序列化为JSON,因为有些人建议我这样做。它非常干净。
public async Task<string> MediktorHubCrearUsuario(string conf, string userId, string sexo, string deviceId)
{
var sexoStr = "";
if(sexo == "MALE") {
sexoStr = "MALE";
} else if(sexo == "FEMALE") {
sexoStr = "FEMALE";
}
var guid = Guid.NewGuid().ToString(); // guid para el username y el password
var data = new patientMediktor();
data.deviceId = userId;
data.deviceType = "WEB";
data.apiVersion = "4.0.3";
data.language = "es_ES";
data.externUser = new patientMediktor.externUserClass(userId, guid, guid, sexoStr); // extern user
data.includeAuthToken = "true";
string output = JsonConvert.SerializeObject(data);
var ServerMedictor = conf;
var client = new HttpClient{BaseAddress = new Uri(ServerMedictor)};
MediaType = "application/json";
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(MediaType)); //ACCEPT header
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("xxxxxx", "xxxxxxxxxxxx");
var Client = client;
var request = await Client.PostAsJsonAsync("externUser", output);
request.EnsureSuccessStatusCode();
var status = await request.Content.ReadAsStringAsync();
return status;
}
如果有人知道如何处理这个问题,那真是太感谢了。我会继续尝试组合如何处理这个问题的替代方案。* 尽管进行了修改,我仍然有同样的问题。我确实序列化了对象,并且我以我需要的方式获得了它。但是,每当涉及到请求时,它都会给我一个400 Bad Request。
亲切的问候和感谢你
3条答案
按热度按时间bwitn5fc1#
尝试使用
PostAsync
而不是PostAsJsonAsync
请在HttpClient not supporting PostAsJsonAsync method C#上找到有关
PostAsJsonAsync
的更多详细信息nfs0ujit2#
看起来你应该删除以下行末尾的逗号:
一般来说,更喜欢使用模型类并序列化它们(使用
Newtonsoft.Json
(example)或System.Text.Json
),而不是硬编码的字符串。fruv7luv3#
答案就在这里。Basic Auth的头部结构从一开始就错了。为了编码它,我不得不像这样传递
new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
,因此传递给请求。我还用PostAsync替换了PostAsJsonAsync。它工作起来很有魅力!最后,我得到了一个状态码200 OK,我需要传递给我的视图的数据。