W WebAPI, powiedzmy wrócę łańcuch owinięty w odpowiedzi http:ASP.NET WebAPI: Jak kontrolować zawartość napisów zwróconych do klienta?
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
Kiedy powołując tę akcję z jQuery, tekst odpowiedzi jest traktowany zanim zostanie on zwrócony. Więc w XHR, mam coś takiego:
function success(xhr) {
alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}
Innymi słowy, ciąg zostaje owinięte w cudzysłowach i znaki specjalne się uciec, dzięki czemu pojawiają się one na wyjściu (rzeczywista alert jest „Line1 \ r \ n Line2 ", więc znaki nowej linii nie są zachowywane, ale są zakodowane i pokazane w tekście odpowiedzi).
mogę obejść ten problem poprzez usunięcie cytaty i zastępując znaki nowej linii na kliencie tak:
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
.replace('\\r', '\r').replace('\\n', '\n');
Ale czy jest jakiś sposób, aby powiedzieć WebAPI jak formatować reakcje łańcuchowe? Na przykład, aby nie zawijać ich w podwójne cudzysłowy i nie konwertować znaków zbiegów?
Dziękuję, to jest dokładnie to, czego szukałem. Jedno ostatnie pytanie, które jest lepsze: Aby dodać formatator typu mediów do konfiguracji i użyć "text/plain" jako trzeciego argumentu do CreateResponse lub użyć nowego PlaintTextFormatter() jako trzeciego argumentu? – danludwig
Preferuję pierwszą opcję, ponieważ Web API zlokalizuje wtedy odpowiedni formatter z konfiguracji. Jeśli kiedykolwiek zmienisz formatyzator, musisz to zrobić tylko w jednym miejscu. –
Dlaczego ajax jQuery interpretuje odpowiedź jako błąd? –