Вызов метода удаления API-контроллера не работает - PullRequest
2 голосов
/ 04 апреля 2019

Методы Get и Post работают нормально, но когда я пытаюсь вызвать конечную точку Delete, создается впечатление, что она никогда не выполняется.

UserController.cs

[HttpDelete]
[MapToApiVersion("1.0")]
public async Task<IActionResult> Delete([FromForm] string userName)
{
    return await RemoveUser(userName);
}

Я использую HttpClient для выполнения запроса следующим образом:

using (Client = new HttpClient())
{
    Client.BaseAddress = new Uri("https://localhost:44332/");
    var result = await Client.DeleteAsync(new Uri($"/api/v{Version}/User" +"/xxx"));
    return result.ToString();
}

Я создал консольное приложение для тестирования API:

Program.cs

public class Program
{
    private static readonly HttpClient Client = new HttpClient { BaseAddress = new Uri("https://localhost:44332/") };

    public static void Main(string[] args)
    {
        Task.Run(() => RunAsync(args));
        Console.ReadLine();
    }

    private static async Task RunAsync(IReadOnlyList<string> args)
    {
        var result = await Client.DeleteAsync(new Uri($"/api/v1/user/gareth"));
        Console.WriteLine(result.ToString());
    }
}

Когда я вызываю одну и ту же конечную точку с помощью Postman, это работает, что я делаю неправильно?

1 Ответ

1 голос
/ 04 апреля 2019

Вы пытаетесь проанализировать имя пользователя из тела запроса ([FromBody]), но вы не предоставляете никакой полезной нагрузки для HTTP-клиента, вместо этого вы указываете параметр в URL-адресе.Поэтому ваш метод API должен выглядеть примерно так:

UserController.cs

[HttpDelete("{userName}")]
public async Task<IActionResult> Delete(string userName)
{
    return await RemoveUser(userName);
}

Приведенный ниже код выдаст DELETEзапрос к UserController и передача john-doe в качестве параметра userName.

Program.cs

private static void Main(string[] args)
{
    var httpClient = new HttpClient { BaseAddress = new Uri("https://localhost:44332") };
    httpClient.DeleteAsync(new Uri("/api/v1/user/john-doe", UriKind.Relative)).Wait();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...