尝试读取Web.config配置节时出现错误

时间:2013-03-09 15:45:51

标签: c# api authentication configuration servicestack

我试图找出是否可以使用主机标头中的API密钥配置ServiceStack来验证呼叫?

我在这里找到了一个例子: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实例参数:无法从'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>

有人可以告诉我,我做错了吗?

非常感谢

1 个答案:

答案 0 :(得分: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"/>

希望有所帮助!