C# 无法调用两个连续的api方法,一个用于创建用户,另一个用于删除创建的用户
我在开发api时遇到了一个问题,我有一些调用,比如CreateUser、DeleteUser、GetAllUser等。不管怎样,我都无法连续创建和删除用户调用。 当我调用createuser方法返回用户id时,我无法删除新创建的用户,它将返回404notfound状态码 我尝试过postman,使用runner集合,它没有错误,工作正常,所以我认为这是api调用的问题,而不是控制器方法的问题。 我还尝试创建一个用于测试的小控制台应用程序(附件),遵循microsoft文档中的示例,但没有成功, 在这一点上,我不确定可能是什么问题,我想到了一个sql问题,可能在我删除它之前,它没有时间创建行,但是在postman中,它可以正常工作,所以,或者异步调用有问题,但我总是等待结果,所以我认为这没问题C# 无法调用两个连续的api方法,一个用于创建用户,另一个用于删除创建的用户,c#,asp.net-web-api,C#,Asp.net Web Api,我在开发api时遇到了一个问题,我有一些调用,比如CreateUser、DeleteUser、GetAllUser等。不管怎样,我都无法连续创建和删除用户调用。 当我调用createuser方法返回用户id时,我无法删除新创建的用户,它将返回404notfound状态码 我尝试过postman,使用runner集合,它没有错误,工作正常,所以我认为这是api调用的问题,而不是控制器方法的问题。 我还尝试创建一个用于测试的小控制台应用程序(附件),遵循microsoft文档中的示例,但没有成功,
static string _basicAuthenticationUser = "UserTest";
static string _basicAuthenticationPassword = "Password";
static string _email = "user@gmail.com";
static string _password = "test";
static UtentiApiModel userToCreate =
new UtentiApiModel
{
Nome = "Alex",
Cognome = "Hello",
Email = "user@gmail.com",
Password = "test",
};
static HttpClient client = new HttpClient();
static void Main(string[] args)
{
var authValue = new AuthenticationHeaderValue(
"Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{_basicAuthenticationUser}:{_basicAuthenticationPassword}")));
client = new HttpClient()
{
DefaultRequestHeaders = { Authorization = authValue }
};
RunAsync().GetAwaiter().GetResult();
}
private static async Task RunAsync()
{
client.BaseAddress = new Uri("http://localhost:1045/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var id = await CreateUserAsync(userToCreate);
var statusCode = await DeleteUserAsync(id);
Console.WriteLine(statusCode.ToString());
Console.ReadKey();
}
static async Task<long> CreateUserAsync(UtentiApiModel utente)
{
var json = JsonConvert.SerializeObject(utente);
var content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(
"test/", content);
response.EnsureSuccessStatusCode();
var reslt = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<UtentiApiModel>(reslt).Id;
}
static async Task<HttpStatusCode> DeleteUserAsync(long id)
{
HttpResponseMessage response = await client.DeleteAsync(
"/test/"+id+");
return response.StatusCode;
}
静态字符串\u basicAuthenticationUser=“UserTest”;
静态字符串_basicAuthenticationPassword=“Password”;
静态字符串_email=”user@gmail.com";
静态字符串_password=“test”;
静态UntiaPiModel userToCreate=
新Utenitiapimodel
{
Nome=“Alex”,
Cognome=“你好”,
电子邮件=”user@gmail.com",
Password=“test”,
};
静态HttpClient=新HttpClient();
静态void Main(字符串[]参数)
{
var authValue=新的AuthenticationHeaderValue(
“Basic”,Convert.ToBase64String(Encoding.UTF8.GetBytes($”{u basicAuthenticationUser}:{u basicAuthenticationPassword}”);
client=新的HttpClient()
{
DefaultRequestHeaders={Authorization=authValue}
};
RunAsync().GetAwaiter().GetResult();
}
专用静态异步任务RunAsync()
{
client.BaseAddress=新Uri(“http://localhost:1045/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var id=await CreateUserAsync(userToCreate);
var statusCode=await DeleteUserAsync(id);
Console.WriteLine(statusCode.ToString());
Console.ReadKey();
}
静态异步任务CreateUserAsync(UteniaPiModel utente)
{
var json=JsonConvert.SerializeObject(utente);
var content=newstringcontent(json.ToString(),Encoding.UTF8,“application/json”);
HttpResponseMessage response=wait client.PostAsync(
“测试/”,内容);
response.EnsureSuccessStatusCode();
var reslt=await response.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(reslt.Id);
}
静态异步任务DeleteUserAsync(长id)
{
HttpResponseMessage response=await client.DeleteAsync(
“/test/”+id+”;
返回response.StatusCode;
}
您是否验证了Id是否正常返回,是否已反序列化并正确传递给DeleteUserAsync?是的,Id正常,实际上如果我在不成功的删除调用后放置调试断点,请稍等,然后再次运行删除调用,它将正常工作,问题是当我一个接一个地运行它们时那就像是并发问题。如果您尝试使用不同的
HttpClient
实例进行删除调用,会发生什么?我已经尝试过了,我使用新的HttpClient将每个调用都放在一个实例中,但没有运气…我做了一些其他测试,实际上我不认为这是并发问题,我已经尝试在创建方法上放置一个调试断点d执行sql查询,在delete方法上执行另一个。顺序是正确的,但在这一点上存储过程将找不到用户。可能是sql问题,但如果是这样,我不理解postman为什么工作。