Пользовательский ActionResult всегда возвращает пустую строку для «ContentType»

#asp.net-mvc-3 #content-type

#asp.net-mvc-3 #content-type

Вопрос:

У меня есть следующий пользовательский 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 resu<
        case RestfulResultType.Json:
            JsonResult result = new JsonResult();
            return resu<
        case RestfulResultType.JsonP:
            JsonPResult result = new JsonPResult();
            return resu<
        case RestfulResultType.Xml:
            return new XmlResult(null);
        default:
            ViewResult result = new ViewResult();
            return resu<
    }

}
  

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
  

Ответ №1:

Запрос.ContentType — это

Mime-тип тела запроса (используется с запросами POST и PUT)

Вы должны проверить HttpRequest .Принять значение заголовка

Допустимые типы содержимого