2013-03-09 6 views
1

Я пытаюсь выяснить, можно ли настроить ServiceStack для аутентификации вызова с использованием ключа API в заголовке хоста?Ошибка при попытке прочитать раздел конфигурации Web.config

Я нашел пример здесь: http://rossipedia.com/blog/2013/03/06/simple-api-key-authentication-with-servicestack/

, но по какой-то причине в моем Clients.cs, который выглядит следующим образом:

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Linq; 
using System.Web; 

namespace Servicestack_MVC.Models 
{ 
public static class Clients 
{ 
    private static Lazy<ClientSection> section = new Lazy<ClientSection>(() => 
      (ClientSection)ConfigurationManager.GetSection("apiClients")); 

    public static bool VerifyKey(string apiKey) 
    { 
     return section.Value.Cast<ClientSection.ClientElement>() 
       .SingleOrDefault(ce => ce.ApiKey == apiKey); 
    } 
} 

} 

Я получаю ошибки:

Ошибки 9 Instance аргумент: невозможно преобразовать из «Servicestack_MVC.Models.ClientSection» в «System.Linq.IQueryable» и

Ошибка 10 «Servicestack_MVC.Models.ClientSection» не содержит определения для «Cast» и лучшей перегрузки метода расширения. «System.Linq.Queryable.Cast (System.Linq.IQueryable)» имеет некоторые недопустимые аргументы

В разделе web.config Я добавил:

<section name="apiClients" type="ClientSection" requirePermission="false"/> 

и добавил раздел

<apiClients> 
    <clients> 
    <client name="Client1" apiKey="somelongrandomkey" /> 
    <client name="Client2" apiKey="somelongrandomkey" /> 
    <!-- etc --> 
    </clients> 
</apiClients> 

Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста?

Большое спасибо

+0

У меня есть немного ближе Я * думаю *. Теперь я изменил VerifyKey на следующее: return section.Value.Clients.Cast (). SingleOrDefault (ce => ce.ApiKey == apiKey); , но теперь получение ошибки Ошибка Невозможно неявно преобразовать тип 'Servicestack_MVC.Models.ClientSection.ClientElement' в 'bool' –

+0

К сожалению! Вы правы, это опечатка на моем посту. Он исправлен. – rossipedia

ответ

2

Это на самом деле ошибка на моем посту. Это исправлено. Фактический код должен выглядеть так:

public static bool VerifyKey(string apiKey) 
{ 
    return section.Value.Cast<ClientSection.ClientElement>() 
      .Any(ce => ce.ApiKey == apiKey); 
} 

Кроме того, ваш обработчик раздела конфигурации должен быть полностью квалифицирован. По внешнему виду, похоже, вы поместили код в пространство имен Servicestack_MVC.Models.

В этом случае ваш <section> тег должен выглядеть следующим образом:

<section name="apiClients" type="Servicestack_MVC.Models.ClientSection" requirePermission="false"/> 

Надежда, что помогает!

+0

безупречный! - Большое спасибо! Я закончил с разделом возврата строки. Value.Clients.Cast (). Любой (ce => ce.ApiKey == apiKey); –

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