我需要在Http Header中存储不同语言的消息:
响应标头
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.5
X-AspNetMvc-Version 3.0
X-Message-Type Success
X-Message <p>Token wysÅany</p>
X-AspNet-Version 4.0.30319
X-Powered-By ASP.NET
Date Wed, 18 May 2011 12:49:26 GMT
Content-Length 2
但是,正如你所看到的,X-Message失去了它的格式。它应该是“Tokenwysłany”。 救命。感谢
编辑: 这就是我所拥有的:
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var viewData = filterContext.Controller.ViewData;
var response = filterContext.HttpContext.Response;
foreach (var messageType in Enum.GetNames(typeof(MessageType)))
{
var message = viewData.ContainsKey(messageType)
? (ErrorMessageExtensions.ErrorMessage)viewData[messageType]
: null;
if (message != null) // We store only one message in the http header. First message that comes wins.
{
response.AddHeader("X-Message-Type", messageType);
response.AddHeader("X-Message", message.RenderAjax());
return;
}
}
}
我正在尝试将消息传递集成到我的mvc应用程序中(如此):http://blogs.taiga.nl/martijn/2011/05/03/keep-your-users-informed-with-asp-net-mvc/唯一的问题是它需要支持多语言。还有哪些其他选项(或此解决方案的修复程序可以支持其他语言字符)?感谢
答案 0 :(得分:2)
正如已经指出的,标题应该只包含US-ASCII或ISO-8859-1字符。
根据要阅读标题的人,考虑urlencode()
消息。
这将确保标题中只有ASCII字符。只要你一直使用UTF-8,它就能正常工作。
当然,您需要在其上执行urldecode()
,以便再次可读。
答案 1 :(得分:2)
我对Martijn Boland的这个非常消息传递项目遇到了同样的问题。在我的情况下,我需要在巴西葡萄牙语中使用的重音字符:éáíóãõõ等......
我这样做是为了解决问题:
response.AddHeader("X-Message", HttpUtility.HtmlEncode(message.ToString()));
然后在视图页面(.cshtml)中显示消息:
function displayMessage(message, messageType)
{
$("#messagewrapper").html('<div class="messagebox ' + messageType.toLowerCase() + '"></div>');
$("#messagewrapper .messagebox").html(message);
displayMessages();
}
看到我改变了
$("#messagewrapper .messagebox").text(message);
到
$("#messagewrapper .messagebox").html(message);
那是因为现在我们得到entity numbers(HTML
标记)而不是纯文本。
这样做你不需要在答案中提到的额外的decode-jquery-plugin。
答案 2 :(得分:1)
HTTP headers使用US-ASCII编码,因此您应避免在此编码之外的标头中发送字符。 message body当然可以使用任何编码。
答案 3 :(得分:1)
好的,我明白了。为了使用其他语言字符,我执行以下操作:
response.AddHeader("X-Message", HttpUtility.UrlEncode(message.RenderAjax(), Encoding.UTF8));
然后,我使用这个插件:http://urldecoderonline.com/javascript-url-decode-jquery-plugin.htm 对字符串进行urldecode。这会产生正确的输出:)。
感谢大家的帮助。
答案 4 :(得分:0)
HttpHeaders只能包含ISO-8859-1字符(可用的完整列表here)。
我不相信有任何解决方法。