#asp.net-mvc-2 #post #header #http-response-codes
#asp.net-mvc-2 #Публикация #заголовок #http-response-codes
Вопрос:
Я разрабатываю REST API с использованием MVC2.
При обработке запроса POST в методе Action предполагается, что я заполняю различные пользовательские заголовки ответов значениями, а также устанавливаю конкретные коды ответа HTTP.
Поскольку это POST-запрос, я возвращаю EmptyResult.
Когда я обращаюсь к сайту, я вижу, что пользовательские заголовки заполняются, но код ответа (который я установил с помощью Response.StatusCode = …) игнорируется, и я всегда получаю 200.
Мой технический руководитель предложил использовать HttpException для получения кода ответа, но я считаю это неправильным подходом. Я все равно пробовал это, и, как я и подозревал, код ответа — write, но все остальное (мои пользовательские заголовки ответов) испорчено.
Следуя аналогичному потоку в StackOverflow, я попытался написать свой собственный подкласс ActionResult, чтобы справиться с этим, но опять же — я просто возвращаю 200 секунд.
Класс для тех, кому интересно, находится здесь:
Public Class HttpStatusCodeActionResult : Inherits ActionResult
#Region "Data Members"
Private mintStatusCode As Integer = 0
Private mstrStatusDescription As String = ""
#End Region
Public Sub New(ByVal vintStatusCode As Integer, ByVal vstrStatusDescription As String)
mintStatusCode = vintStatusCode
mstrStatusDescription = vstrStatusDescription
End Sub
Public Overrides Sub ExecuteResult(ByVal context As System.Web.Mvc.ControllerContext)
context.HttpContext.Response.StatusCode = mintStatusCode
If mstrStatusDescription <> "" Then
context.HttpContext.Response.StatusDescription = mstrStatusDescription
End If
End Sub
End Class
Есть ли у кого-нибудь идеи, каким может быть правильный подход к возможности указать код ответа и вернуть мои пользовательские заголовки? Кстати, это только кажется POST-запросами — запросы GET, похоже, работают нормально…
Приветствия в ожидании,
Мартин.
Ответ №1:
если это работает с get, вы можете перенаправить на другое действие после обработки post и там вы можете установить заголовок repspose
Комментарии:
1. Приветствую Мухаммеда. Можете ли вы объяснить, почему вы перенаправили, пожалуйста? (Я не гуру MVC …). Я бы подумал, что как только я перенаправлю на другой метод действия, я потеряю заголовки ответа, которые я уже создал?
2. вы можете сохранить действие для настройки ваших заголовков, и вы можете установить все свои заголовки после того, как вы обработали сообщение и достигли этого действия с помощью перенаправления. это предложение должно было стать обходным путем ситуации.
3. Таким образом, HTTP-ответ сохранит заголовки даже при переходе к новому результату действия? Подождите — дайте ему закрутиться…
4. 1 за смелую попытку, но использование перенаправления действия фактически отправит клиенту ответ 302. Если бы клиент был браузером, это могло бы не иметь такого большого значения, но в данном случае клиент — это чужой код… Боюсь, не могу согласиться…
5. На самом деле, я собираюсь принять этот ответ, поскольку он отвечает на вопрос, который я задал — это не ваша вина, что мои обстоятельства означают, что я не могу его использовать. Если у кого-то еще есть предложение, не стесняйтесь…