Sitecore-Web Api Удостоверяване на потребителя

Искам да изпратя данните за sitecore само на удостоверен потребител. Как да предам обекта HttpWebRequest към функцията DownloadString на уебклиента.... DownloadString не може да приеме HttpWebRequest като параметър. Следвах тази връзка Sitecore 7.2 - Елемент Уеб 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();
    }

Също така трябва да информирате домейна в потребителското име. като sitecore\admin

наздраве

person RobertoBr    schedule 13.10.2014
comment
Здравей Робърт, какъв е отговорът тук? - person Salman Shaykh; 14.10.2014
comment
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); но все пак това ми дава {statusCode:401,error:{message:Достъпът до сайта не е предоставен.}} - person Salman Shaykh; 14.10.2014
comment
Съжалявам Салман. Редактирах отговора, за да включа обекта за отговор - person RobertoBr; 14.10.2014

...и ето начин да го направите с помощта на рамката на уеб API; просто защото съм фен на async.

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