вернуть код ошибки 401 на POST, но также перенаправить на страницу, на которую ссылаются - PullRequest
0 голосов
/ 21 декабря 2011

Я использую шаблон post / redirect / get в моем веб-приложении asp.net mvc 3.Как правило, если вы отправляете POST, который запускает проверку, вы получаете перенаправление 302 обратно на исходную страницу, чтобы пользователь мог исправить ввод своей формы и повторить отправку.

Но что произойдет, если вы захотите вернуть 401 на POST, потому что у пользователя нет достаточных прав на POST для этого ресурса?Легко вернуть код состояния 401, но потом я не могу перенаправить обратно на исходную страницу.Если пользователь обновит страницу, он получит запрос «браузер должен повторно отправить ранее отправленную информацию», что является основным смыслом выполнения post / redirect / get

Не лучше ли мне пытатьсявернуть правильный код состояния 401 и просто придерживаться типичных перенаправлений 302 для всех POST?

1 Ответ

2 голосов
/ 21 декабря 2011

Вы можете добавить заголовок Location к своему ответу, например:

HttpContext.Current.Headers['Location'] = 'http://www.gohereinstead.com/';

Однако я не уверен, как каждый браузер будет интерпретировать это вместе с кодом статуса 401.

EDIT

Хм, при ближайшем рассмотрении спецификации, я не думаю, что будет возможно перенаправить POST, в этом:

Если код состояния 301 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, так как это может изменить условия, на которых был выдан запрос.

  Note: When automatically redirecting a POST request after
  receiving a 301 status code, some existing HTTP/1.0 user agents
  will erroneously change it into a GET request.
...