gpt4 book ai didi

asp.net - 网络 API : No MediaTypeFormatter is available to read an object of type 'IEnumerable` 1' from content with media type ' text/plain'

转载 作者:行者123 更新时间:2023-12-02 05:18:27 26 4
gpt4 key购买 nike

我的客户端(一个 ASP.NET MVC 应用程序)在调用我的 ASP.NET Web API 时遇到了这个错误。我检查了一下,Web API 正在正常返回数据。

No MediaTypeFormatter is available to read an object of type 
'IEnumerable`1' from content with media type 'text/plain'.

我相信我可以从 DataContractSerializer 继承并实现我自己的序列化程序,它可以将 Content-Type HTTP header 附加为 text/xml .

但我的问题是:有必要吗?

因为如果是,则意味着默认的 DataContractSerializer 不会设置此基本 header 。我想知道微软是否可以将如此重要的事情排除在外。还有别的出路吗?

这是相关的客户端代码:

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);
}
}
}

最佳答案

我相信(因为我现在没有时间测试)您需要在传递给 HttpResponseException 的 responseMessage 上显式设置状态代码。通常,HttpResponseException 会为您设置状态代码,但由于您显式提供了响应消息,它会使用其中的状态代码。默认情况下,`HttpResponseMessage 的状态代码为 200。

所以发生的事情是您在服务器上收到错误,但仍返回 200。这就是为什么您的客户端试图反序列化由 StringContent 生成的文本/纯正文,就好像它是 IEnumerable 一样。

你需要设置

responseMessage.StatusCode = HttpStatusCode.InternalServerError

在服务器上的异常处理程序中。

关于asp.net - 网络 API : No MediaTypeFormatter is available to read an object of type 'IEnumerable` 1' from content with media type ' text/plain',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com