ASP.NET Web API への呼び出しから、クライアント (ASP.NET MVC アプリケーション) でこのエラーが発生します。確認したところ、Web API は問題なくデータを返しています。
No MediaTypeFormatter is available to read an object of type
'IEnumerable`1' from content with media type 'text/plain'.
HTTPDataContractSerializer
ヘッダーを.Content-Type
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();
}
}
サーバー側 (Web 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);
}
}
}