Как аутентифицировать запрос клиента 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)?