Аутентификация пользователя Sitecore-Web API

Я хочу отправить данные ядра сайта только аутентифицированному пользователю. Как передать объект HttpWebRequest в функцию DownloadString веб-клиента... DownloadString не может принимать HttpWebRequest в качестве параметра. Я перешел по этой ссылке Sitecore 7.2 — Item Web API-Аутентификация пользователя

var client = new WebClient();

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://gyldendal.local/-/item/v1/?sc_itemid={110D8759F-DEA9-42EA-9C1C-8A5DF7E70EF9}&sc_database=master");

    request.Headers["X-Scitemwebapi-Username"] = "admin";
    request.Headers["X-Scitemwebapi-Password"] = "b";
 var apiResponse = client.DownloadString(request);
            dynamic jsonResponse = JObject.Parse(apiResponse);

person Salman Shaykh    schedule 13.10.2014    source источник


Ответы (3)


Вы можете получить ответ от объекта запроса напрямую.

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("...");

    request.Headers["X-Scitemwebapi-Username"] = "sitecore\admin";
    request.Headers["X-Scitemwebapi-Password"] = "b";

    //(...)

    using (var response = (HttpWebResponse)request.GetResponse())
    {
       var stream = response.GetResponseStream();
       var reader = new StreamReader(stream);

       string apiResponse = reader.ReadToEnd();
    }

Также нужно указать домен в имени пользователя. Как 2_

Ваше здоровье

person RobertoBr    schedule 13.10.2014
comment
Привет, Роберт, что здесь за ответ? - person Salman Shaykh; 14.10.2014
comment
Ответ HttpWebResponse = (HttpWebResponse)request.GetResponse(); но все же это дает мне {statusCode: 401, ошибка: {сообщение: доступ к сайту не предоставлен.}} - person Salman Shaykh; 14.10.2014
comment
Жалко Салмана. Я отредактировал ответ, чтобы включить объект ответа - person RobertoBr; 14.10.2014

... и вот способ сделать это, используя структуру веб-API; просто потому, что я фанат асинхронности.

using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage
                {
                    RequestUri = new Uri("..."),
                    Method = HttpMethod.Get
                };

                request.Headers.Add("X-Scitemwebapi-Username", "sitecore\admin");
                request.Headers.Add("X-Scitemwebapi-Password", "b");

                var response = await client.SendAsync(request);
                if (response.IsSuccessStatusCode)
                {
                    var responseString= await response.Content.ReadAsStringAsync();
                    ...
                }
            }
person Vasiliy Fomichev    schedule 13.10.2014

Мне нравится использовать RestSharp вместо HttpWebRequest, поэтому я решил добавить в список еще одну версию:

// Build a client pointing to your sitecore instance
IRestClient restClient = new RestClient("http://gyldendal.local/");
// Add credentials to all future requests
restClient.AddDefaultHeader("X-Scitemwebapi-Username", @"sitecore\admin");
restClient.AddDefaultHeader("X-Scitemwebapi-Password", "b");

// Build a request to the item api
IRestRequest restRequest = new RestRequest("/-/item/v1/", Method.GET);
// specify API parameters
restRequest.AddParameter("sc_database", "master");
restRequest.AddParameter("sc_itemid", "{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}");

#if DEBUG
Console.WriteLine( restClient.BuildUri(restRequest) ); // http://gyldendal.local/-/item/v1/?sc_database=master&sc_itemid={110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}
#endif

// Execute request
IRestResponse restResponse = restClient.Execute(restRequest);

// Confirm successful response
if (restRequest.StatusCode == HttpStatusCode.OK)
{
    /* Work with restResponse.Content */
#if DEBUG
    Console.WriteLine(restResponse.Content); // {"statusCode":200,"result":{....}}
#endif
}

Кроме того, просто для ясности, убедитесь, что itemwebapi включен для вашего конкретного <site>. Для установки по умолчанию вы можете использовать следующий файл исправления, чтобы включить его:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <sites>
      <site name="website">
        <!-- Options: Off|StandardSecurity|AdvancedSecurity -->
        <patch:attribute name="itemwebapi.mode">StandardSecurity</patch:attribute>
        <!-- Options: ReadOnly|ReadWrite -->
        <patch:attribute name="itemwebapi.access">ReadOnly</patch:attribute>
        <!-- Options: True|False -->
        <patch:attribute name="itemwebapi.allowanonymousaccess">False</patch:attribute>
      </site>
    </sites>
  </sitecore>
</configuration>
person Brad Christie    schedule 14.10.2014