Я звоню в простую службу Web Api, используя HTTPClient. Служба принимает параметр, такой как URL, и сохраняет его в таблице SQL, преобразует этот URL в guid и возвращает его вызывающей стороне. Приведенный ниже код используется внутри веб-части SharePoint, которая вызывается с помощью обработчика событий нажатия кнопки.
public void DisplayUrl(string host,string paramUrl)
{
string longUrl = string.Format("https://{0}-UrlApi/AddUrl?longUrl={1}", host,paramUrl);
var result = GetUrl(longUrl).GetAwaiter().GetResult();
tboxResults.Text = result.ShortUrl;
}
protected static async Task<ShortUrlResponse> GetUrl(string baseUrl)
{
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
using (var client = new HttpClient(handler))
{
var response = client.GetAsync(baseUrl).Result;
if (response.IsSuccessStatusCode)
{
HttpResponseMessage response1 = response;
response.EnsureSuccessStatusCode();
var resp = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ShortUrlResponse>(resp);
return result;
}
return null;
}
}
Веб-часть развернута в среде тестирования, и когда я открываю страницу в браузере с компьютера вне тестового сервера, я получаю эту ошибку. В какой-то момент я тоже получил его на тестовом сервере, но после второго нажатия кнопки он заработал правильно, но не на компьютере разработчика, например.
Это ошибка, которую я получаю.
Сообщение об ошибке: произошла одна или несколько ошибок.
InnerException:
System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка. ---> System.Net.WebException: удаленный сервер
вернул ошибку: (401) не авторизован. --->
System.ComponentModel.Win32Exception: попытка входа не удалась при
System.Net.NTAuthentication.GetOutgoingBlob (Byte [] входящийBlob,
Boolean throwOnError, SecurityStatus & statusCode) в
System.Net.NTAuthentication.GetOutgoingBlob (String входящийBlob) в
System.Net.NegotiateClient.DoAuthenticate (вызов строки, веб-запрос
webRequest, учетные данные ICredentials, логический preAuthenticate) в
System.Net.NegotiateClient.Authenticate (вызов строки, веб-запрос
webRequest, учетные данные ICredentials) на
System.Net.AuthenticationManagerDefault.Authenticate (вызов строки,
Запрос WebRequest, учетные данные ICredentials) на
System.Net.AuthenticationState.AttemptAuthenticate (HttpWebRequest
httpWebRequest, ICredentials authInfo) в
System.Net.HttpWebRequest.CheckResubmitForAuth () в
System.Net.HttpWebRequest.CheckResubmit (Exception & e, Boolean &
disableUpload) --- Конец внутренней трассировки стека исключений --- в
System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) в
System.Net.Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar)
--- Конец внутренней трассировки стека исключений
StackTrace:
в System.Threading.Tasks.Task`1.GetResultCore (логическое ожидание завершения уведомления)
TUrlControl:
at System.Threading.Tasks.Task`1.GetResultCore (логическое ожидание завершения уведомления)
в AIntranet.WebParts.TUrl.TUrlUserControl.d__3.MoveNext ()
Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача
задача)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult ()
в AIntranet.WebParts.TUrl.TUrlUserControl.DisplayUrl (Строковый хост, String paramUrl)
в AIntranet.WebParts.TUrl.TUrlUserControl.b__1_0 ()
в Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess (CodeToRunElevated
SecureCode)
в Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges (WaitCallback
secureCode, Object param)
в Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges (CodeToRunElevated
SecureCode)
в AIntranet.WebParts.TUrl.TUrlUserControl.btnTUrl_Click (Отправитель объекта, EventArgs e)