C# NancyFx:将默认字符集设置为utf8

C# NancyFx:将默认字符集设置为utf8,c#,nancy,C#,Nancy,我的cshtml文件中有以下代码段: Expires on: @Model.EndDate.ToString("MMM dd yyyy") 我在回答中得到了这样的回答: HTTP/1.1200正常 内容类型:text/html ... 有效期:׳�׳�׳™ 05 2013 我如何告诉Nancy在默认情况下使用UTF8进行响应 编辑:澄清一下,这不是本地化问题,输出已经本地化了-只是本地化的UTF8字符串没有UTF8字符集声明就被发送到客户端,因此它在试图将其视为拉丁1时被弄糟了 我要找的是

我的cshtml文件中有以下代码段:

Expires on: @Model.EndDate.ToString("MMM dd yyyy")
我在回答中得到了这样的回答:

HTTP/1.1200正常
内容类型:text/html
...
有效期:׳�׳�׳™ 05 2013
我如何告诉Nancy在默认情况下使用UTF8进行响应


编辑:澄清一下,这不是本地化问题,输出已经本地化了-只是本地化的UTF8字符串没有UTF8字符集声明就被发送到客户端,因此它在试图将其视为拉丁1时被弄糟了

我要找的是:

HTTP/1.1200正常
内容类型:text/html;字符集=utf-8
...
我不想为每个响应单独指定它


我使用的是web框架如果要在模块的响应中指定UTF8字符集声明,可以定义一个。以下是如何在模块的构造函数中定义后拦截器:

After += ctx =>
{
    ...
}
您还可以在引导程序中定义应用程序级挂钩:

pipelines.AfterRequest += (ctx) => { ... };
更新: 根据评论,最好的方法是在钩子中使用以下代码:

if (ctx.Response.ContentType == "text/html")
    ctx.Response.ContentType = "text/html; charset=utf-8";

期望的输出是什么?例如,是否为2013年4月5日?还是要本地化的月份名称?日期已本地化,但本地化字符串在编码过程中丢失。因此,答案是我想“我想要一个本地化的月份名称”。您是否尝试过指定区域性?例如:@Model.EndDate.ToString(“ddd MMM”,CultureInfo.CreateSpecificCulture(“ar SA”))文化不是问题-问题是“如何告知在默认情况下使用UTF8进行响应?”。我希望Nancy具有更专用的内置功能,但这解决了问题。:-)实际上这不起作用。。。在any after拦截器中的
Response
上设置的值被忽略。如果您将上述代码放在
NegotiationContext
上,那么它可以工作,但会导致json请求出错,因为它是在json视图呈现程序有机会设置内容类型之前调用的。换句话说,if的第一部分永远不会被调用。因此,寻找正确答案的工作仍在继续,恐怕…:-\好的,正确的方法是使用
Response.ContentType
。由于似乎只有HtmlResponse不处理字符集,因此可以安全地将其限制为:
if(ctx.Response.ContentType==“text/html”)ctx.Response.ContentType=“text/html;charset=utf8”。如果你编辑你的答案,我会接受:-)有没有一种方法可以在全球范围内,而不是在每个模块的基础上这样做?(在每个模块都有拦截器之后)@FrankSchwieterman你不能改用应用程序级钩子吗?