2013-03-22 2 views
0

У меня есть пользовательские сообщения об ошибках, которые я хочу отобразить для пользователя. Поэтому, когда они говорят, что ввести плохое имя пользователя/пароль комбо я мог бы сделать это в моем коде:Пользовательский 400 с перезаписываемым сообщением

Response.StatusCode = 400; 
return Json("Invalid username or password"); 

Это прекрасно работает на моей локальной машине. Я развертывании на веб-хостинга, и эти сообщения были переписаны на сервере, так что все они вышли, как:

страница не может быть отображена, поскольку внутренняя ошибка сервера имеет произошло.

Сервер явно пытается защитить меня от раскрытия конфиденциальной информации о том, что пошло не так, но я на самом деле хочу эту ошибку, чтобы пройти и будет виден пользователю (ну на самом деле, разобран мой код, а затем отображается) ,

Я предполагаю, что в web.config есть что-то, что я могу сделать, чтобы сделать эту работу, но все, что я пробовал до сих пор, не работает. Есть идеи?

Соответствующий раздел web.config, как у меня сейчас:

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="PassThrough"> 
    </httpErrors> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    etc. 

ответ

0

Решение проблемы закончилось тем, что удалил элемент < httpErrors> из web.config целиком. Даже если установить его по умолчанию, как показано здесь http://www.iis.net/configreference/system.webserver/httperrors не работает, поэтому я немного озадачен, почему его удаление работает.

<system.webServer> 
    **Remove <httpErrors> !** 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
0

Для обработки каждого Http код ошибки необходимо добавить конкретное отображение в файле web.config

<customErrors mode="On/RemoteOnly" > 
     <error statusCode="400" redirect="My400View" /> 
     <error statusCode="404" redirect="My404iew" /> 
     <error statusCode="500" redirect="My500View" /> 
    </customErrors> 
+0

Ну, это вызов AJAX, поэтому нет представления. Я хочу отобразить текстовое сообщение, информирующее пользователя о том, что их вход не был принят. Будет ли ваше предложение работать на это? – JPRO

+0

Если вы используете jQuery, вы можете использовать свойство 'statusCode' (http://api.jquery.com/jQuery.ajax/) – pollirrata

+0

И если у меня есть несколько сообщений об ошибках? В ответе есть описательное сообщение об ошибке, я вижу это локально. Проблема в том, что на моем размещенном сервере есть что-то, препятствующее доставке. – JPRO

2

По умолчанию некоторые HTTP-коды статуса закрываются IIS и заменяются им. Тем не менее, он может быть сконфигурирован с помощью этой строки:

<system.webServer> 
    <httpErrors errorMode="Detailed"/> 

Это позволит вам передать персонализированное сообщение в ответе и прочитать его на стороне клиента, когда AJAX вызов делается.

+0

Я тоже думал, что это будет что-то вроде этого, особенно часть «PassThrough». Во всяком случае, я попробовал это точно так, как вы это делали в своем ответе, и я до сих пор получаю простое сообщение с одним лайнером. : \ – JPRO

+0

Работал для меня. Осторожно не путать его с «» в «». –

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