Свойство или индексатор 'AuthenticationHeaderValue.Parameter' не могут быть назначены - оно доступно только для чтения - PullRequest
0 голосов
/ 17 сентября 2018
public IList<FormResponse> GetForms(HttpRequestMessage request)
{
       string storeCode = ExtractBasicAuthUserFromHeader(request);
       List<Form> forms = _apiRepository.GetForms(storeCode);     ///23424324  
       return forms;
}

 private string ExtractBasicAuthUserFromHeader(HttpRequestMessage reqeust)
 {
    Encoding encoding = Encoding.GetEncoding("iso-8859-1");
    string usernamePassword = encoding.GetString(Convert.FromBase64String(reqeust.Headers.Authorization.Parameter 
     ));

      return usernamePassword.Substring(0, usernamePassword.IndexOf(':'));
  }

Я написал следующий тест для проверки выше

private readonly Mock<IApiRepository> _apiRepository = new Mock<IApiRepository>();


[TestInitialize]
public void Init()
{
    _apiRepository.Setup(x => x.GetForms("23424324")).Returns(_forms); //skipping FromBase64String converation for understanding
}


 [TestMethod]
 public void GetForms_ReturnFormList()
 {
  HttpRequestMessage reqeust = new HttpRequestMessage(); ;

  //Error   CS0200  Property or indexer 'AuthenticationHeaderValue.Parameter' cannot be assigned to -- it is read only  
reqeust.Headers.Authorization.Parameter = "23424324:12341234123"; 

  IList<FormResponse> formList = _formService.GetForms(reqeust);

  Assert.AreEqual(formList.Count, 2);
 }

получить следующую ошибку

Ошибка CS0200 Свойство или индексатор 'AuthenticationHeaderValue.Parameter' не могут быть назначены - оно доступно только для чтения

интересно, как я могу издеваться над HttpRequestMessage reqeust = new HttpRequestMessage (); добавить базовую строку reqeust.Headers.Authorization.Parameter протестировать функциональность GetForms в классе услуг

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете использовать что-то вроде этого:

client.DefaultRequestHeaders.Authorization =
       new AuthenticationHeaderValue("key", "=" + value);

Подробнее здесь: Настройка заголовка авторизации HttpClient

0 голосов
/ 17 сентября 2018

request.Headers.Authorization имеет тип AuthenticationHeaderValue, и этот класс имеет свойства Scheme и Parameter. Эти свойства доступны только.

Вы получаете сообщение об ошибке, потому что пытаетесь присвоить значение этим свойствам, доступным только для готовности.

Вам нужно присвоить значение request.Headers.Authorization, создав объект класса AuthenticationHeaderValue.

Подумайте над тем, чтобы сделать следующее.

request.Headers.Authorization = new AuthenticationHeaderValue(somescheme, someparameter);

Вам нужно поставить фактические значения вместо somescheme и someparameter в приведенном выше коде.

Подробную информацию о классах HttpRequestMessage и AuthenticationHeaderValue можно получить по ссылкам ниже.

https://msdn.microsoft.com/en-us/library/system.net.http.headers.authenticationheadervalue(v=vs.118).aspx

https://msdn.microsoft.com/en-us/library/system.net.http.httprequestmessage(v=vs.118).aspx

https://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders(v=vs.118).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...