【问题标题】:No MediaTypeFormatter is available to read after deployment to prod部署到 prod 后没有可供读取的 MediaTypeFormatter
【发布时间】:2012-06-09 03:23:15
【问题描述】:

我有一个 webapi 项目 mvc4 rc 和一个 mvc4 rc web 应用程序部署在服务器上。

本地一切正常,但在服务器上我收到错误

2012-06-09 03:18:18,659 [23] INFO WebApplication.Controllers.AccountController – System.InvalidOperationException:没有 MediaTypeFormatter 可用于从媒体类型为“未定义”的内容中读取“业务”类型的对象. 在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable1 formatters, IFormatterLogger formatterLogger) at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, IEnumerable1 格式化程序) 在 C:\@Code\WebApplication\Repository\BusinessRepository.cs:line 37 中的 WebApplication.Repository.BusinessRepository.GetByUserId(Guid userId) 在 C:\@Code\WebApplication\Controllers\AccountController.cs:line 61 中的 WebApplication.Controllers.AccountController.SignIn(LogOnModel 模型,字符串 returnUrl) .

我尝试调用该服务的代码如下所示

 var url = ApiRestHelper.ApiUrl(ApiEndPointConstants.GetBusinessByUserId, "userId", userId.ToString());
 var service = ApiRestHelper.Get(url).Content;
 var data = service.ReadAsAsync<Business>().Result;
 HttpContext.Current.Session["BusinessInfo"] = data;
 return data;

 public static HttpResponseMessage Get(string apiMethod, string baseAddress)
    {
        var myHttpClient = new System.Net.Http.HttpClient
        {
            BaseAddress = new Uri(baseAddress)
        };
        var get = myHttpClient.GetAsync(apiMethod);
        var x = get.Result;
        return x;
    }

我做错了什么?

【问题讨论】:

  • 你要部署的服务器上是否也安装了MVC4?
  • 嗨,杰西,是的,我已经安装了
  • 服务器和开发PC上的MVC4版本相同?模型绑定器中存在一些可能导致此问题的差异。 stackoverflow.com/questions/10934077/…
  • 是的,听起来可能类似于 Scott Hanselman 在这里写的博客:hanselman.com/blog/… 他讨论了如何使用 MvcDiagnostics nuget 包进行故障排除。

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

此消息表明您正在尝试从未指定 Content-Type 标头的消息中反序列化 Business 的实例。在这种情况下,Web API 不知道如何反序列化消息(例如,它不知道是 xml 还是 json)。您确定服务器上正在调用的服务正在返回正确注释的消息吗? (您可以检查 service.Headers.ContentType 属性的值)。

【讨论】:

  • 我添加了 MvcDaiagnostics 并且相同的版本正在服务上运行。 @marcind我认为您正在做某事,我添加了一个日志以查看该值是什么以及它显示的 System.InvalidOperationException: No MediaTypeFormatter 可用于从媒体类型为“未定义”的内容中读取“业务”类型的对象。
  • System.Net.Http.HttpClient 不允许我设置媒体类型,所以我在需要应用它的地方有点迷茫。我尝试使用 [FromUri] 和 [FromBody] 但这些都没有帮助
  • 在我的本地机器上,我正在获取 application/json,但是从 prod 服务器返回的数据是 text/html。为什么会发生这种情况?
  • 很难说。你能控制生产服务器吗?
猜你喜欢
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2012-05-11
  • 2017-05-07
相关资源
最近更新 更多