Несколько месяцев назад Microsoft решила изменить класс HttpResponseMessage. Раньше вы могли просто передать тип данных в конструктор, а затем вернуть сообщение с этими данными, но не больше.
Теперь вам нужно использовать свойство Content, чтобы установить содержимое сообщения. Проблема в том, что он имеет тип HttpContent, и я не могу найти способ конвертировать строку, например, в HttpContent.
Кто-нибудь знает, как бороться с этим вопросом? Большое спасибо.
c#
asp.net-mvc
asp.net-web-api
претор
источник
источник
Вы должны создать ответ, используя Request.CreateResponse :
Вы можете передавать объекты, а не только строки, CreateResponse, и он будет сериализовывать их на основе заголовка Accept запроса. Это избавит вас от ручного выбора форматера.
источник
CreateErrorResponse()
если ответ является ошибкой, как в примере с этим ответом. Внутри моего try-catch я использую:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
И, это правильный ответ, если вас вообще беспокоит соблюдение заголовка Accept вызывающего, без лишних махинаций. (И вы используете WebAPI)ApiController
. Если выController
вместо этого только наследуете , это не работает, и вы должны создать его самостоятельно:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Видимо, новый способ сделать это подробно здесь:
http://aspnetwebstack.codeplex.com/discussions/350492
По словам Хенрика,
Таким образом, в основном необходимо создать тип ObjectContent, который, очевидно, можно вернуть как объект HttpContent.
источник
new JsonMediaTypeFormatter();
или похоже в зависимости от вашего форматаObjectContent
не найден, используя WCFСамым простым однострочным решением является использование
Для сериализованного контента JSON:
источник
Для любого объекта T вы можете сделать:
источник
Request
доступно только дляCreateResponse
метода, если вы наследуетеApiController
. Это не будет работать при использованииController
.Вы можете создавать свои собственные специализированные типы контента. Например, один для содержимого Json и один для содержимого Xml (затем просто назначьте их для HttpResponseMessage.Content):
источник
Вдохновленный ответом Саймона Мэттеса, мне нужно было удовлетворить IHttpActionResult требуемый тип возврата ResponseMessageResult. Кроме того, используя JsonContent от Nashawn, я получил ...
Смотрите ответ nashawn для JsonContent.
источник
Не сомневаюсь, что вы правы, Флорин. Я работал над этим проектом и обнаружил, что этот кусок кода:
Может быть заменено на:
источник