【问题标题】:Receive No MediaTypeFormatter is available to read when calling web api in browser在浏览器中调用 web api 时接收没有 MediaTypeFormatter 可供读取
【发布时间】:2019-07-14 17:46:30
【问题描述】:

我有一个 Angular 7 应用程序,它带有一个用 VB 编码的 ASP.net web api 后端。我可以毫无问题地发布、放置和获取数据,但是当我尝试通过路由或 ID 访问数据时,我收到以下错误:

请求包含实体主体,但没有 Content-Type 标头。此资源不支持推断的媒体类型“application/octet-stream”。没有 MediaTypeFormatter 可用于从媒体类型为“application/octet-stream”的内容中读取“ProjectSummary”类型的对象。System.Net.Http。 System.Net.Http.HttpContentExtensions.ReadAsAsync[T] 处的 UnsupportedMediaTypeException(HttpContent 内容,类型类型,IEnumerable1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken) at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)

我想要做的是调用一个 SQL 函数,其中 :id 是一个从 api 传递的变量。它在 SQL Developer 中运行良好,但在我的 api 访问时却不行。这是我的功能的一部分:

 Public Function GetValue(ByVal id As Integer, <FromBody()> ByVal psum As ProjectSummary)

        Dim reslist As New List(Of Models.ProjectSummary)

        'Dim res As String = String.Empty
        Dim con As New OracleConnection(ConfigurationManager.ConnectionStrings("BOTDB").ConnectionString)
        Dim cmd As New OracleCommand(CommandType.Text, con)
        cmd.CommandText = "select PROJECT_ID, PROJECT_NAME, ROADBLOCKS 
                from TPMT_PROJECT WHERE PROJECT_ID = :id"

如果我想获取项目 ID 1 的数据,我是否应该能够通过转到 url .../api/ProjectData/1 来访问这些数据?

这是我的 WebApiConfig.vb 中的一个 sn-p:

  ' Web API routes
    config.MapHttpAttributeRoutes()

    config.Routes.MapHttpRoute(
        name:="DefaultApi",
        routeTemplate:="api/{controller}/{id}",
        defaults:=New With {.id = RouteParameter.Optional}
    )

任何帮助将不胜感激,因为我在这个问题上花费了大量时间。

【问题讨论】:

  • 这个问题取决于您如何格式化 JSON、调用 Web API 方法和您使用的 HTTP 方法 (GET/POST)。如果要发送 JSON 数据,还可以尝试将 Content-Type 设置为 application/json;charset=UTF-8
  • 您好,哲也。如何设置内容类型?我对 POST 和 PUT 没有任何问题,因为我的 Angular 应用程序可以正确处理它们。只有当我向 GET 函数添加额外的参数或路由时。

标签: asp.net vb.net api web mediatypeformatter


【解决方案1】:

我已经解决了这个问题。有点不好意思,问题出在我的getValue函数的声明上哈哈。

我有 Public Function GetValue(ByVal id As Integer, &lt;FromBody()&gt; ByVal psum As ProjectSummary)

但应该是的

Public Function GetValue(ByVal id As Integer) As ProjectSummary()

简单的监督。

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2016-03-10
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多