Возврат разных кодов ответа при публикации MVC2

#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. На самом деле, я собираюсь принять этот ответ, поскольку он отвечает на вопрос, который я задал — это не ваша вина, что мои обстоятельства означают, что я не могу его использовать. Если у кого-то еще есть предложение, не стесняйтесь…