3

Im using Windows.Web.Http.HttpClient для подключения к моему WEB API. Приложение не запросило идентификатор пользователя и пароль, но недавно я изменил WEB API, переместив фильтр AuthorizeAttribute с Action на класс. Теперь мое приложение Windows хранит запрос приложения 8.1 для идентификатора пользователя и пароля. Пожалуйста, дайте мне знать, как установить HttpClient, чтобы не запрашивать логин и пароль. Может any1 предложить мне делать, мне нужно, чтобы добавить заголовок к моему httpcleintWindows.Web.Http.HttpClient + WEB API Аутентификация Windows

используя (Windows.Web.Http.HttpClient HTTPClient = новый Windows.Web.Http.HttpClient()) { // Добавление заголовка агента пользователя var headers = httpClient.DefaultRequestHeaders;

// безопасный способ проверить значение заголовка от пользователя является метод TryParseAdd // Поскольку мы знаем, что этот заголовок хорошо, мы используем ParseAdd с сгенерирует исключение // с плохим значением - http://msdn.microsoft.com/en-us/library/windows/apps/dn440594.aspx

   headers.UserAgent.ParseAdd("ie"); 
       headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 


       using (var response = await httpClient.GetAsync(new Uri(url))) 

Я не вижу способ отправить учетные данные по умолчанию.

ответ

12

Отключить диалоговые окна пользовательского интерфейса, используя HttpBaseProtocolFilter.AllowUI. Попробуйте следующее:

Windows.Web.Http.Filters.HttpBaseProtocolFilter filter = 
    new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); 
filter.AllowUI = false; 
HttpClient client = new HttpClient(filter); 

Uri uri = new Uri("http://localhost/?basic=1"); 
var response = await client.GetAsync(uri); 
System.Diagnostics.Debug.WriteLine(response); 

Вам нужны учетные данные? Используйте HttpBaseProtocolFilter.ServerCredential. Попробуйте следующее:

Uri uri = new Uri("http://localhost?ntlm=1"); 

Windows.Web.Http.Filters.HttpBaseProtocolFilter filter = 
    new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); 
filter.AllowUI = false; 

// Set credentials that will be sent to the server. 
filter.ServerCredential = 
    new Windows.Security.Credentials.PasswordCredential(
     uri.ToString(), 
     "userName", 
     "abracadabra"); 

HttpClient client = new HttpClient(filter); 
var response = await client.GetAsync(uri); 
System.Diagnostics.Debug.WriteLine(response); 

Нужны ли вам учетные данные Windows (учетные данные для домена)? Просто добавьте Enterprise Authentication к вашему Package.appxmanifest.

0

Я попытался применить ваше решение, но оно не работает должным образом, или, может быть, я не понимаю, что я должен делать. Мне нужно указать учетные данные Windows, и я включил возможность Enterprise Authentification в моем приложении UWP.

Я использую код, который вы предлагаете:

var filter = new HttpBaseProtocolFilter(); 
filter.AllowUI = false; 
var client = new HttpClient(filter); 
HttpResponseMessage response = new HttpResponseMessage(); 
response = await client.PostAsync(concUri, null); 

Но ответ возвращает мне 401,3 ошибку в ...

Если добавить логин/пароль к ServerCredential, это хорошо работает:

var filter = new HttpBaseProtocolFilter(); 
filter.AllowUI = false; 
filter.ServerCredential = new Windows.Security.Credentials.PasswordCredential(WebServiceConstants.WebServiceUrl.ToString(), "login", "password"); 
var client = new HttpClient(filter); 
HttpResponseMessage response = new HttpResponseMessage(); 
response = await client.GetAsync(concUri); 

Но я не вижу, какова роль Enterprise Authentication возможность в этом случае, если мне нужно пройти регистрацию и пароль ...

Смежные вопросы