如何在ASP.NET媒体信任中检索Google Blogger Feed?

时间:2009-10-08 02:06:22

标签: asp.net gdata-api

我在HostMySite.com上托管了一个ASP.NET网站,他们最近将共享帐户更改为以中等信任方式运行。在我的网站上,我查询我的Blogger帐户并获取博客帖子以显示在我的网站上。

我正在使用Google.GData.Client v1.4.0.2

检索在本地工作(并且在ISP调用中等信任之前一直工作)。现在我收到以下错误:

[SecurityException: Request for the permission of type 'System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +58
   System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint) +147
   System.Net.HttpRequestCreator.Create(Uri Uri) +26
   System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase) +216
   System.Net.WebRequest.Create(Uri requestUri) +31
   Google.GData.Client.GDataRequest.EnsureWebRequest() +77
   Google.GData.Client.GDataRequest.Execute() +42
   Google.GData.Client.Service.Query(Uri queryUri, DateTime ifModifiedSince, String etag, Int64& contentLength) +193
   Google.GData.Client.Service.Query(FeedQuery feedQuery) +202

我搜索了Google文档和在线但未能找到我需要更改的内容。

4 个答案:

答案 0 :(得分:1)

某些主机会将默认信任级别设置为“中”(或类似于中等的自定义信任级别),但允许在web.config中覆盖它,如下所示:

<system.web>
    <trust level="Full" originUrl="" />
</system.web>

你试过覆盖它吗?

答案 1 :(得分:0)

在中等信任下,网络应用无法打开远程HTTP连接。我没有意识到的解决方法。您最好的选择是切换到另一个主机,或者与您的主机进行协商以执行GoDaddy does他们放宽WebPermission设置的地方,特别是允许像您这样的sccenarios服务器应用必须从远程HTTP服务器获取数据谷歌的。

顺便说一句,我不是说GoDaddy是一个伟大的主机 - 他们不是 - 但他们确实修改了他们的中等信任设置来解决你问题中提到的问题。如果像GoDaddy这样的低端主机愿意这样做,那么你可以用这个作为一个论据来说服其他主持人这样做。

答案 2 :(得分:0)

您只是检索博客帖子吗? RSS源不能为您完成这项工作吗?这适用于我为客户做的GoDaddy网站。

请记住导入命名空间(可能需要添加对项目的引用):

using System.ServiceModel.Syndication;

protected void Page_Load(object sender, EventArgs e)
    {

        XmlReader xmlReader = System.Xml.XmlReader.Create("URL to blog feed");

        SyndicationFeed feed = SyndicationFeed.Load(xmlReader);
        lstLatestNews.DataSource = feed.Items.Take(5);
        lstLatestNews.DataBind();
    }

在ASPX页面中:

<asp:ListView ID="lstLatestNews" runat="server">
        <LayoutTemplate>
            <ul id="latest_news">
                <li id="itemPlaceholder" runat="server"></li>
            </ul>
        </LayoutTemplate>
        <ItemTemplate>
            <li><a href="<%# Eval("Links[0].Uri.AbsoluteUri") %>"><%# Eval("Title.Text") %></a> <em><%# Convert.ToDateTime(Eval("PublishDate.DateTime")).ToString("g") %></em></li>
        </ItemTemplate>
    </asp:ListView>

答案 3 :(得分:0)

根据您想要使用的内容,您可以查看Google AJAX Feed API,这是一个javascript api,可让您将rss源嵌入到您的网站中。

您将无法从服务器端访问它,它只会显示在用户浏览器中。

如果您尝试将此内容编入搜索引擎索引,需要将其保存到数据库或对其进行操作,以便该解决方案不适用于您。

Google Feed API文档位于: