Пользовательский ActionResult всегда возвращает пустую строку для «ContentType» - PullRequest
0 голосов
/ 03 октября 2011

У меня есть следующий пользовательский 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

1 Ответ

0 голосов
/ 03 октября 2011

Request.ContentType равен

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

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

Типы содержимого, которые являются приемлемыми

...