我從客戶端(ASP.NET MVC應用程序)我的ASP.NET Web API。我檢查並且Web API正在返回數據。Web API:沒有MediaTypeFormatter可用於從媒體類型爲'text/plain'的內容中讀取'IEnumerable`1'類型的對象。
No MediaTypeFormatter is available to read an object of type
'IEnumerable`1' from content with media type 'text/plain'.
我相信,我可以從DataContractSerializer
繼承和實現我自己的序列可以附加Content-Type
HTTP標頭爲text/xml
。
但我的問題是:是否有必要?
因爲如果是這樣,這意味着默認DataContractSerializer
不會設置此重要標題。我想知道微軟是否可以離開這樣一件重要的事情。有另一種出路嗎?
下面是相關的客戶端代碼:
public ActionResult Index()
{
HttpClient client = new HttpClient();
var response = client.GetAsync("http://localhost:55333/api/bookreview/index").Result;
if (response.IsSuccessStatusCode)
{
IEnumerable<BookReview> reviews = response.Content.ReadAsAsync<IEnumerable<BookReview>>().Result;
return View(reviews);
}
else
{
ModelState.AddModelError("", string.Format("Reason: {0}", response.ReasonPhrase));
return View();
}
}
而這裏的服務器端(網頁API)代碼:
public class BookReviewController : ApiController
{
[HttpGet]
public IEnumerable<BookReview> Index()
{
try
{
using (var context = new BookReviewEntities())
{
context.ContextOptions.ProxyCreationEnabled = false;
return context.BookReviews.Include("Book.Author");
}
}
catch (Exception ex)
{
var responseMessage = new HttpResponseMessage
{
Content = new StringContent("Couldn't retrieve the list of book reviews."),
ReasonPhrase = ex.Message.Replace('\n', ' ')
};
throw new HttpResponseException(responseMessage);
}
}
}
您是否嘗試過爲您正在製作的http請求設置內容類型? –
嘗試將返回類型從IEnumerable切換到列表 – frictionlesspulley
它看起來像是 - 你見過http://stackoverflow.com/questions/10428177/asp-net-mvc4-webapi-and-posting-xml-data –