Как аутентифицировать запрос клиента WPF в ASP .NET WebAPI 2

Я только что создалASP .NET MVC 5 веб-API проект и добавил модель Entity Framework и другие вещи, чтобы заставить его работать сASP. Чистая идентичность.

Теперь мне нужно создать простой аутентифицированный запрос к стандартному методу этого API из клиентского приложения WPF.

ASP .NET MVC 5 веб-API-код

[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController

        // GET api/Account/UserInfo
        [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
        [Route("UserInfo")]
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            return new UserInfoViewModel
            {
                UserName = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            };
        }

Клиентский код WPF

public partial class MainWindow : Window
{
    HttpClient client = new HttpClient();

    public MainWindow()
    {
        InitializeComponent();

        client.BaseAddress = new Uri("http://localhost:22678/");
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json")); // It  tells the server to send data in JSON format.
    }

    private  void Button_Click(object sender, RoutedEventArgs e)
    {
        Test();
    }

    private async void Test( )
    {
        try
        {
            var response = await client.GetAsync("api/Account/UserInfo");

            response.EnsureSuccessStatusCode(); // Throw on error code.

            var data = await response.Content.ReadAsAsync();

        }
        catch (Newtonsoft.Json.JsonException jEx)
        {
            // This exception indicates a problem deserializing the request body.
            MessageBox.Show(jEx.Message);
        }
        catch (HttpRequestException ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {               
        }
    }
}

Кажется, что он подключается к хосту, и я получаю правильную ошибку. Все в порядке.

Код состояния ответа не указывает на успех: 401 (не авторизован).

Основная проблема в том, что я не уверен, как отправить имя пользователя и пароль с помощью клиента WPF ...

(Ребята, я не спрашиваю, должен ли я зашифровать его и использовать Auth Filter для реализации методов API. Я сделаю это наверняка позже ...)

Я слышал, что я должен отправить имя пользователя и пароль в запросе заголовка ... но я нене знаю, как это можно сделать с помощьюHttpClient client = new HttpClient();

Спасибо за любую подсказку!

Постскриптум Должен ли я заменитьHttpClient сWebClient и использовать (TaskНевозможно пройти аутентификацию в ASP.NET Web Api с помощью HttpClient)?

Ответы на вопрос(1)

Ваш ответ на вопрос