在MVC4中向客户端发送Unicode异常消息

时间:2015-05-16 14:32:21

标签: ajax asp.net-mvc-4 unicode

我正在使用以下解决方案。它工作得很好(使用MVC4),但是当错误消息包含Unicode字符时它们都失败了(它们最终都是??????)。

Send exception message in Ajax.BeginForm MVC 4 scenario

任何人都知道如何解决这个问题?

先谢谢

ps:我不能在原始帖子中发表评论,因为我的声誉很低。

1 个答案:

答案 0 :(得分:0)

在上面的链接中使用Furynation提出的解决方案。

我通过将消息转换为Base64并发送Unicode来找出临时解决方案。

filterContext.HttpContext.Response.StatusDescription =
    Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(filterContext.Exception.Message));

当客户端Ajax.BeginForm收到错误时,我使用以下代码来获取Unicode中的错误消息。

function (data, status, xhr) {
    var Error = DecodeString(atob(data.statusText));
}

我需要编写另一个函数DecodeString()来进行转换,因为atob()将所有内容转换为8位ASCII(幸运的是没有进入?????????)

function Decode(u) {
var a = [];
var i = 0;
while (i < u.length) {
    var v = u[i++];
    if (v < 0x80) {
    } else if (v < 0xE0) {
        v = (31 & v) << 6;
        v |= (63 & u[i++]);
    } else if (v < 0xF0) {
        v = (15 & v) << 12;
        v |= (63 & u[i++]) << 6;
        v |= (63 & u[i++]);
    } else {
        v = (7 & v) << 18;
        v |= (63 & u[i++]) << 12;
        v |= (63 & u[i++]) << 6;
        v |= (63 & u[i++]);
    }
    a.push(String.fromCharCode(v));
}
return a.join('');
}

function DecodeString(s) {
    var u = [];
    for (var i = 0; i < s.length; i++)
        u.push(s.charCodeAt(i));
    return this.Decode(u);
}

PS。我无法在原始帖子中发布此解决方案,因为我的声誉很低。