Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法调用两个连续的api方法,一个用于创建用户,另一个用于删除创建的用户_C#_Asp.net Web Api - Fatal编程技术网

C# 无法调用两个连续的api方法,一个用于创建用户,另一个用于删除创建的用户

C# 无法调用两个连续的api方法,一个用于创建用户,另一个用于删除创建的用户,c#,asp.net-web-api,C#,Asp.net Web Api,我在开发api时遇到了一个问题,我有一些调用,比如CreateUser、DeleteUser、GetAllUser等。不管怎样,我都无法连续创建和删除用户调用。 当我调用createuser方法返回用户id时,我无法删除新创建的用户,它将返回404notfound状态码 我尝试过postman,使用runner集合,它没有错误,工作正常,所以我认为这是api调用的问题,而不是控制器方法的问题。 我还尝试创建一个用于测试的小控制台应用程序(附件),遵循microsoft文档中的示例,但没有成功,

我在开发api时遇到了一个问题,我有一些调用,比如CreateUser、DeleteUser、GetAllUser等。不管怎样,我都无法连续创建和删除用户调用。 当我调用createuser方法返回用户id时,我无法删除新创建的用户,它将返回404notfound状态码

我尝试过postman,使用runner集合,它没有错误,工作正常,所以我认为这是api调用的问题,而不是控制器方法的问题。 我还尝试创建一个用于测试的小控制台应用程序(附件),遵循microsoft文档中的示例,但没有成功, 在这一点上,我不确定可能是什么问题,我想到了一个sql问题,可能在我删除它之前,它没有时间创建行,但是在postman中,它可以正常工作,所以,或者异步调用有问题,但我总是等待结果,所以我认为这没问题

    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为什么工作。