2015-05-16 4 views
1

Я использую это решение ниже. Он отлично работает (с использованием MVC4), но не удался, когда сообщение об ошибке содержит символы Unicode (все они закончились как ??????).Отправить сообщение об ошибке Unicode для клиента в MVC4

Send exception message in Ajax.BeginForm MVC 4 scenario

Кто-нибудь есть какие-либо идеи, как решить эту проблему?

Заранее спасибо

пс: Я не могу оставить комментарий в исходном потоке, потому что моя репутация низка.

ответ

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() преобразует все в 8bits 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); 
} 

пс. Я не могу опубликовать это решение в исходном потоке, потому что моя репутация низкая.

Смежные вопросы