Со стороны сервлета это полностью соответствует спецификации HttpServletResponse#sendError()
.
Отправляет клиенту сообщение об ошибке с использованием указанного состояния и очищает буфер.По умолчанию сервер создает ответ, похожий на страницу ошибок сервера в формате HTML, содержащую указанное сообщение, и устанавливает тип содержимого «text / html».
Так что на самом деле нет другого способа, кроме самого анализа HTML на стороне клиента (.net).
Вы можете создать пользовательскую страницу ошибок 403.jsp
, которая содержит только сообщение об исключении
<%@page isErrorPage="true"%>
${exception.message}
и укажите в web.xml
следующее:
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
, так что все тело ответа является уже целым исключениемсообщение.Но это может быть невыгодно всякий раз, когда служба сервлета также вызывается обычными веб-браузерами.Возможно, вы захотите управлять выводом JSP условно на основе некоторого атрибута запроса, чтобы он возвращал либо только сообщение, либо полноценную HTML-страницу.
Еще одна альтернатива, о которой я могу подумать, - установить ее кактакже настраиваемый заголовок ответа.
String errorMessage = "Login Error: wrong password!";
response.setHeader("X-Error-Message", errorMessage);
response.sendError(HttpServletResponse.SC_FORBIDDEN, errorMessage);
(обратите внимание, что я исправил статическую ссылку, вызываемую для класса, а не для экземпляра)
В .netсторона, чтобы сделать пользовательский заголовок:
catch (WebException e)
{
HttpWebResponse resp = e.Response as HttpWebResponse;
string errorMessage = resp.Headers["X-Error-Message"];
// ...
}