【问题标题】:Custom ActionResult always returns empty string for "ContentType"自定义 ActionResult 始终为“ContentType”返回空字符串
【发布时间】:2011-10-03 14:38:24
【问题描述】:

我有以下自定义 ActionResult。如果我“强制”ContentType,它可以正常工作,但默认行为似乎是检索一个空字符串作为 ContentType

C#版本

public ActionResult Restful(Web.Mvc.Controller controller)
{
    // Test code
    var contentType = controller.Request.ContentType;
    // Above always returns ""

    switch (ResultType(controller)) {
        case RestfulResultType.Html:
            ViewResult result = new ViewResult();
            return result;
        case RestfulResultType.Json:
            JsonResult result = new JsonResult();
            return result;
        case RestfulResultType.JsonP:
            JsonPResult result = new JsonPResult();
            return result;
        case RestfulResultType.Xml:
            return new XmlResult(null);
        default:
            ViewResult result = new ViewResult();
            return result;
    }

}

VB.NET 版本

    <Extension()>
    Public Function Restful(controller As Web.Mvc.Controller) As ActionResult

    ''# Test code
    Dim contentType = controller.Request.ContentType
    ''# Above always returns ""

        Select Case ResultType(controller)
            Case RestfulResultType.Html
                Dim result As New ViewResult()
                Return result
            Case RestfulResultType.Json
                Dim result As New JsonResult()
                Return result
            Case RestfulResultType.JsonP
                Dim result As New JsonPResult()
                Return result
            Case RestfulResultType.Xml
                Return New XmlResult(Nothing)
            Case Else
                Dim result As New ViewResult()
                Return result
        End Select

    End Function

为什么我不能从中获得适当的 contentType?

PS:如果你关心ResultType 的作用,就在这里。

    Private Function ResultType(controller As Web.Mvc.Controller) As RestfulResultType

        Select Case LCase(controller.HttpContext.Request.ContentType)
            Case "text/html" : Return RestfulResultType.Html
            Case "application/json" : Return RestfulResultType.Json
            Case "text/javascript" : Return RestfulResultType.JsonP
            Case "application/javascript" : Return RestfulResultType.JsonP
            Case "application/x-javascript" : Return RestfulResultType.JsonP
            Case "text/xml" : Return RestfulResultType.Xml
            Case "application/xml" : Return RestfulResultType.Xml
            Case Else : Return RestfulResultType.Html
        End Select
    End Function

【问题讨论】:

    标签: asp.net-mvc-3 content-type


    【解决方案1】:

    Request.ContentType 是

    请求正文的 MIME 类型(用于 POST 和 PUT 请求

    您应该检查HttpRequest.Accept 标头值

    可接受的内容类型

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2023-01-25
      相关资源
      最近更新 更多