.NET ServiceModel.Syndicate - 更改 RSS 源的编码

2024-05-31

我正在尝试解决我在以下位置生成的所有 RSS 源的错误http://captainobvio.us http://captainobvio.us在 Internet Explorer(版本 8 和 9)中产生以下错误:

进给代码错误 从当前切换 编码为指定编码不 支持的。行:1 字符:40

<?xml version="1.0" encoding="utf-16"?>

问题是通过 HTTP 标头发送的实际编码类型与文档声明的不同。以下是将 feed 的输出写入 HTML 的代码:

public ContentResult Index()
        {
            var feed = _syndication.SyndicateIdeas(_repository.GetIdeas(0,15).Ideas);

            var sb = new StringBuilder();
            using (var writer = XmlWriter.Create(sb, new XmlWriterSettings { Encoding = Encoding.UTF8, NewLineHandling = NewLineHandling.Entitize, NewLineOnAttributes = true, Indent = true}))
            {
                feed.SaveAsRss20(writer);
                writer.Close();
            }

            return Content(sb.ToString(), "application/rss+xml", Encoding.UTF8);
        } 

下面是我使用 .NET 4.0 中的 System.ServiceModel.Syndicate 实际构建提要的代码:

var feed = new SyndicationFeed("CaptainObvio.us - Recent Ideas",
                                          "The most recent ideas posted by the Community on CaptainObvio.us", new Uri("http://captainobvio.us/"), "CaptainObvio.us", new DateTimeOffset(ideas[0].DatePosted), items)
                           {
                               Generator = "CaptainObvio.us - http://captainobvio.us/"
                           };

            return feed;

我想做的是将 XML 文档更改为读取 utf-8 而不是 utf-16。我还检查了 Encoding 命名空间,看看是否有 UTF16 选项(这样我就可以更正 HTTP 标头而不是 XML 文档),但没有找到。

有没有一种简单的方法可以直接从 System.ServiceModel.Syndicate 更改 XML 文档上的编码属性?解决这个问题最简单的方法是什么?


发生这种情况的原因是您将 StringBuilder 传递给 XmlWriter 构造函数。 .NET 中的字符串是 unicode,因此 XmlWriter 假定 utf-16 并且您无法修改它。

因此,您可以使用流而不是字符串生成器,然后您可以使用设置控制编码:

var settings = new XmlWriterSettings 
{ 
    Encoding = Encoding.UTF8, 
    NewLineHandling = NewLineHandling.Entitize, 
    NewLineOnAttributes = true, 
    Indent = true 
};
using (var stream = new MemoryStream())
using (var writer = XmlWriter.Create(stream, settings))
{
    feed.SaveAsRss20(writer);
    writer.Flush();
    return File(stream.ToArray(), "application/rss+xml; charset=utf-8");
}

话虽这么说,这是一个更好、更 MVC 的解决方案,我建议您的解决方案是编写一个SyndicationResult:

public class SyndicationResult : ActionResult
{
    private readonly SyndicationFeed _feed;
    public SyndicationResult(SyndicationFeed feed)
    {
        if (feed == null)
        {
            throw new HttpException(401, "Not found");
        }
        _feed = feed;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var settings = new XmlWriterSettings
        {
            Encoding = Encoding.UTF8,
            NewLineHandling = NewLineHandling.Entitize,
            NewLineOnAttributes = true,
            Indent = true
        };

        var response = context.HttpContext.Response;
        response.ContentType = "application/rss+xml; charset=utf-8";
        using (var writer = XmlWriter.Create(response.OutputStream, settings))
        {
            _feed.SaveAsRss20(writer);
        }
    }
}

并且在您的控制器操作中只需返回此结果,这样您就不会用管道代码混淆控制器操作:

public ActionResult Index()
{
    var ideas = _repository.GetIdeas(0, 15).Ideas;
    var feed = _syndication.SyndicateIdeas(ideas);
    return new SyndicationResult(feed);
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET ServiceModel.Syndicate - 更改 RSS 源的编码 的相关文章

  • 如何获取 XML 文档的innerHTML(AJAX)?

    AJAX 查询后 返回一个 XML 文件 我能够 解析 该文件 但是当涉及到获取元素的 innerHTML 或在本例中为 innerXML 时 问题就出现了 如果 XML 元素 比方说 内容 仅包含我可以执行的操作 content chil
  • .NET 中是否可以抑制第 2 代 GC 收集?

    我的程序分配了大量的实例 这些实例组成了长期存在的 DAWG 在构建此 DAWG 的过程中 有时进度会减慢 100 倍 这与 NET 执行第 2 代 GC 收集完美相关 在此期间 GC 时间百分比 为 99 5 并且 第 2 代总回收量 每
  • 尝试获取类型 LogWriter、键“”的实例时发生激活错误?

    我有 ASP NET 网站 我添加了参考Microsoft Practices EnterpriseLibrary Logging dll到该网站 在 web config 文件中 定义如下
  • invalidate方法有什么作用?

    什么是invalidate方法做在winform app Invalidate method附带六超载里面形成control class of System Windows Forms 名称空间 谢谢 Windows 窗体使用 GDI 进行
  • 未找到源,但无法搜索部分或全部事件日志

    我收到以下异常 我已在注册表编辑中的事件日志上授予对 Asp net 帐户的完全控制权 SecurityException 未找到源 但部分或全部事件 无法搜索日志 无法访问的日志 安全 System Diagnostics EventLo
  • 为什么我可以将 COM 对象转换为错误的接口?

    我有一个 NET 程序 它与另一个进程中的 mshtml 对象进行交互 我写了一个小示例项目 https github com hakito ComCastExample从头来说明问题 在此示例中 我直接使用 COM 引用进行 mshtml
  • 在 XSLT 函数中处理空序列

    我有一个 XSLT 函数 它检查发送的参数是否采用 YYYYMMDD 格式 在某些情况下 我没有获得该函数的任何值 在这些情况下 SAXON 会抛出以下错误 不允许空序列作为 cda isValidDate 的第一个参数 有什么建议如何处理
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 如何检查应用程序的另一个实例是否正在运行[重复]

    这个问题在这里已经有答案了 有人可以展示如何检查程序的另一个实例 例如 test exe 是否正在运行 如果是 则停止加载应用程序 如果存在该实例 想要一些严肃的代码吗 这里是 var exists System Diagnostics P
  • 用于存储和检索每个用户敏感数据的.Net 设计模式

    Net 服务器应用程序是否有与存储和检索敏感的每个用户信息 例如第 3 方凭据 相关的参考模式 我的初步设计思路是 生成具有适当强私钥的自签名 X509 证书 导出证书和密钥并将其存储在 USB 密钥中 该 USB 密钥将被锁在宝箱中并由龙
  • 如何在 web.config 中设置默认的 text/html 内容类型?

    我想将 ASP NET MVC 应用程序中网页的默认内容类型设置为 text html 我知道这可以通过向我的所有 元素添加 ContentType text html 来完成 但我更喜欢使用 web config 我怎样才能做到这一点 T
  • 如何在 ASP.Net MVC 或等效控件中构建复合控件或模板控件?

    在我们当前的 ASP Net Webforms 应用程序中 我们有几个复合 模板服务器控件 它们的存在只是为了具有共同的外观和感觉 例如 我们有一个面板控件 它有一个标题 一个与面板内容相关的按钮位置 当然还有内容 在 MVC 中如何最好地
  • HttpWebRequest.AllowAutoRedirect=false 会导致超时吗?

    我需要测试大约 300 个 URL 以验证它们是否指向实际页面或重定向到其他页面 我在 NET 2 0 中使用 HttpWebRequest 编写了一个简单的应用程序来检查它 这是代码片段 System Net HttpWebRequest
  • 将异步调用变成同步调用

    将异步调用转变为同步有什么好的实践 模式 吗 我有一个第三方库 它的方法都是异步的 要获得几乎任何方法的结果 您必须侦听事件 这将带来一些上下文 基本上它看起来像 service BeginSomething service OnBegin
  • 验证插件在更新面板中不起作用

    我有一个更新面板 面板内有文本框和按钮可用 现在我正在使用 jQuery Validation 插件 但是在更新面板中使用时验证插件不起作用 例如 function GetAddressTargetList var objArray new
  • 如何防止 ASP.NET 站点的图像盗链?

    防止人们从我的托管 ASP NET 网站热链接到图像的最佳 最简单方法是什么 我不需要防止所有图像 资源被热链接 我只是想防止热链接到网站上的特定图像 资源 供参考 它托管在 GoDaddy com 上 因此 IIS 技巧可能不起作用 最简
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2
  • 加密和解密图像.net

    谁能给我一个使用 net 和 asp net 加密和解密图像的示例 当我将图像作为二进制数据保存到 SQL Server 中时 我希望对图像进行加密 包含这些名称空间 using System IO using System Securit
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi

随机推荐

  • 如何使用 Laravel Collective 在表单标签中包含 html?

    通读一遍这个所以线程 https stackoverflow com questions 24361160 radio and checkbox inside label with laravel我读到我可以创建一个新的宏来创建自定义表单输
  • 使用javascript上传到谷歌云存储签名的url

    使用以下代码 我可以上传到谷歌云存储中的公共可写存储桶 allUsers有写权限 但是 如果存储桶不可公开写入 则会收到 401 未经授权的错误 我不希望存储桶可公开写入 var file scope myFile var fileData
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 同一应用程序的不同版本取决于设备(应用程序商店)

    我已经将我的游戏提交到App Store并更新了 现在最新版本是每个下载我游戏的人都应该得到的版本 对吗 现在的问题是 当我从 iPad mini 上的 App Store 下载游戏时 我得到的是正确的版本 但是当我从 iPad 2 下载游
  • 异步 void lambda 表达式

    A quick 会告诉你避免使用async void myMethod 可能的方法 并且在很多情况下都有使其成为可能的方法 https johnthiriet com removing async void 我的问题基本上是这个最佳实践的一
  • 如何检测 Android 设备中的新应用

    我想检测用户何时安装或删除应用程序 但没有找到BroadcastReceiver就是这样做的 在我的应用程序中 我获取了有关该类已安装应用程序的信息PackageManager 但我不想定期扫描应用程序 有没有BroadcastReceiv
  • 如何反转 Python statsmodels ARIMA 预测中的差异?

    我正在尝试使用 Python 和 Statsmodels 来理解 ARIMA 预测 具体来说 为了使 ARIMA 算法发挥作用 需要通过差分 或类似方法 使数据平稳 问题是 在进行残差预测后 如何反转差异以返回到包含差异化趋势和季节性的预测
  • 我以前没见过的 CGRect 语法

    我在一些示例代码中看到了下面的语法 但不确定我是否理解它 CGRect imageRect CGRect size baseImage size 这只是初始化的一种简写方式吗CGRect相当于 CGRect imageRect CGRect
  • 有没有办法使用 .NET 中的 Kafka Ksql Push 查询

    我目前正在 NET 中使用 Kafka 消费者处理大量 Kafka 消息 我的处理过程的第一步是解析 JSON 并根据 JSON 中特定字段的值丢弃许多消息 我不想首先处理 特别是不下载 那些不需要的消息 看起来 kSql 查询 写为推送查
  • 每个存储桶的最大沙发底座视图数

    假设存储桶中有大量数据 gt 100GB gt 100M 文档 gt 12 种文档类型 并且假设每个视图仅适用于一种文档类型 那么每个存储桶有多少视图就太多了 或者以另一种方式问 在什么时候应该将某些文档类型拆分到单独的存储桶中 以节省处理
  • 在这种情况下(C#)替换开关块和枚举的正确方法是什么?

    如果有帮助的话 以下问题是在我正在构建的游戏的背景下提出的 在几个不同的地方我有以下场景 存在一个父类 在本示例中称为 Skill 并且我有许多子类实现父类中的方法 还有另一个父类 我们称之为 Vocation 这些技能需要列在职业的不同子
  • 通过 PDFBox 访问图像的“替代文本”

    有没有某种方法可以使用提取特定图像的 替代文本 PDFBox http pdfbox apache org 我有一个 PDF 文件 如所述http www w3 org WAI GL 2011 WD WCAG20 TECHS 2011062
  • 未签出...捆绑安装无法修复帮助!

    https github com intridea omniauth git at master is not checked out Please run bundle install Bundler GitError 那我该怎么办 捆绑
  • JSON(Gson)反序列化为超类对象然后转换为子类对象的最佳方法是什么

    我目前正在研究在Android上使用Gson for Json 刚刚遇到这个问题 假设我们有如下类 class Command public int id COMMAND ID UNSPECIFIED class CommandSpecif
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • 浏览器如何异步执行Javascript并渲染

    这是jsfiddle上的代码
  • 如何向 3D 表面添加文本

    我使用plot surface 创建了具有平行四边形底座的矩形棱柱 我需要向其中一个表面添加一些文本 我试过ax text 3 0 5 1 red 1 1 0 color red 但文本在表面上不可见 import matplotlib p
  • 该程序链接到哪个库来提供给定的功能?

    我有一个程序调用函数foo这是在库中定义的 我如何知道该库在文件系统中的位置 比如它是静态库还是动态链接库 更新 使用ldd 程序有很多依赖库 如何判断哪个库包含函数foo 您没有说您所在的操作系统 答案取决于系统 在 Linux 和大多数
  • WooCommerce:在数据库中查找产品

    我正在使用 WooCommerce 创建一个网站 我想根据用户在主页搜索表单中输入的邮政编码来限制用户可用的产品 为了能够实现这一目标 我必须在 phpMyAdmin 的数据库中指定每个产品的条件 但我似乎找不到它 有谁知道 phpmyAd
  • .NET ServiceModel.Syndicate - 更改 RSS 源的编码

    我正在尝试解决我在以下位置生成的所有 RSS 源的错误http captainobvio us http captainobvio us在 Internet Explorer 版本 8 和 9 中产生以下错误 进给代码错误 从当前切换 编码