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

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

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



답변

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

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


답변

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

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


답변

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


답변

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

$http({
 method: 'GET',

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


답변

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

public IHttpActionResult Post(Task task)

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

public IHttpActionResult Post(DTOTask task)


답변

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

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


답변