我正在开发一个使用MVC2的REST API。在MVC2 POST下返回不同的响应代码
在Action方法中处理POST请求时,我应该填充各种带有值的自定义Response头,还要设置特定的HTTP响应代码。
由于这是一个POST请求,我正在返回一个EmptyResult。
当我对站点调用时,我可以看到自定义标头正在填充,但响应代码(我使用Response.StatusCode =设置)被忽略,并且我总是得到200.
我的技术负责人建议使用HTTPException获取响应代码,但我认为这是错误的评价。无论如何,我已经尝试过了,正如我怀疑的那样,响应代码是写入的,但其他所有内容(我的自定义响应头)都被搞砸了。
继StackOverflow上的类似线程后,我试图写我自己的ActionResult的子类来处理这个问题,但是我又回到了200s。
类,对于那些有兴趣,是在这里:
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请求似乎做工精细......在期待
干杯,
马丁。
干杯穆罕默德。你能解释一下为什么你会重定向吗? (我不是MVC大师......)。我会想,一旦我重定向到不同的操作方法,我会失去我已经创建的响应标题? – 2011-04-19 15:02:42
您可以保留设置标题的操作,并且您可以在处理完帖子并通过重定向到达该操作后设置所有标题。这个建议本来是为了解决这种情况。 – 2011-04-19 15:11:46
那么HTTP响应甚至会通过我们移动到新的操作结果来保持头部?挂起 - 给它一个漩涡...... – 2011-04-19 15:46:54