POST에서 웹 API 서비스로 json을 보내는 동안 오류가 발생했습니다.


90

Web API를 사용하여 웹 서비스를 만들고 있습니다. 간단한 수업을 구현했습니다.

public class ActivityResult
{
    public String code;
    public int indexValue;
    public int primaryCodeReference;
}

그런 다음 컨트롤러 내부에 구현했습니다.

[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

그러나 POST에서 json 파일을 전달하는 API를 호출하면 다음과 같습니다.

{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}

다음과 같은 오류 메시지가 나타납니다.

{
    "Message": "The request entity's media type 'text/plain' is not supported for this resource.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}

내가 도대체 ​​뭘 잘못하고있는 겁니까?


9
페이로드가 클라이언트에서 수락되도록하려면 "application / json"헤더를 추가해야합니다.
아담 주커만

HTTP 요청에서 헤더를 올바르게 설정했습니다. 그러나 문제는 서버 측 것으로 보인다 : dropbox.com/s/xlidnnybs8v6d0u/Cattura.JPG
GVillani82

4
Accept헤더를 로만 설정하는 것 같습니다 application/json. 또한 Content-Type헤더를 로 설정해야 합니다 application/json.
Brian Rogers

답변:


186

HTTP 요청에서 Content-Type을 다음과 같이 설정해야합니다. Content-Type: application/json

따라서 피들러 클라이언트를 사용 Content-Type: application/json하는 경우 요청 헤더에 추가하십시오.


2
  1. 헤더 속성을 추가해야합니다. Content-Type:application/json
  2. 당신은 주석이되어야 모든 POST 요청 방법 입력 매개 변수를 정의 할 때 [FromBody], 예를 :

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
    
  3. 모든 JSON 입력 데이터는 원시 데이터 여야합니다 .


1

또 다른 팁 ... "content-type : application / json"...을 Composer / Parsed 탭의 텍스트 상자 필드에 추가하는 곳입니다. 이미 3 줄이 채워져 있으므로이 Content-type을 4 번째 줄로 추가했습니다. 그것이 포스트를 작동하게했습니다.


0

POST대신 방법을 전달하고 있는지 확인하십시오 GET. 그렇다면 위에 게시 한 것과 동일한 오류가 발생합니다.

$http({               
 method: 'GET',

요청 엔터티의 미디어 유형 'text / plain'은이 리소스에 대해 지원되지 않습니다.


1
질문은 특히 http POST에 관한 것입니다. 그는 서버로 데이터를 보내는 서버에서 데이터를 요청하지 않습니다.
전쟁

0

나는 모든 설정을 수락 된 답변으로 다루었습니다. 내가 가진 문제는 다음과 같이 Entity Framework 엔터티 유형 "Task"를 업데이트하려고한다는 것입니다.

public IHttpActionResult Post(Task task)

나를 위해 일한 것은 다음과 같은 내 고유 엔티티 "DTOTask"를 만드는 것이 었습니다.

public IHttpActionResult Post(DTOTask task)

0

Content-Type:application/json콘텐츠를 언급하지 않을 때 웹 API 요청 헤더 섹션 에 포함해야하며 기본적 Content-Type:text/plain으로 요청에 전달됩니다.

우편 배달부 도구에서 API를 테스트하는 가장 좋은 방법입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.