programing

웹 API에 게시할 때 지원되지 않는 미디어 유형 오류

lastmoon 2023. 3. 13. 20:46
반응형

웹 API에 게시할 때 지원되지 않는 미디어 유형 오류

윈도 폰 어플리케이션을 만들고 있어 웹 API에서 쉽게 꺼낼 수 있지만 포스팅에 어려움을 겪고 있습니다.API에 투고할 때마다 "Unsupported Media Type"이라는 오류 메시지가 표시되는데, JSON 투고 기준으로 사용하는 클래스가 API에서 사용하는 클래스와 동일하다는 점을 고려할 때 왜 이 오류가 발생하는지 알 수 없습니다.

견적서(포스트 방법)

private async void PostQuote(object sender, RoutedEventArgs e)
        {
            Quotes postquote = new Quotes(){
                QuoteId = currentcount,
                QuoteText = Quote_Text.Text,
                QuoteAuthor = Quote_Author.Text,
                TopicId = 1019
            };
            string json = JsonConvert.SerializeObject(postquote);
            if (Quote_Text.Text != "" && Quote_Author.Text != ""){

                using (HttpClient hc = new HttpClient())
                {
                    hc.BaseAddress = new Uri("http://rippahquotes.azurewebsites.net/api/QuotesApi");
                    hc.DefaultRequestHeaders.Accept.Clear();
                    hc.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage response = await hc.PostAsync(hc.BaseAddress, new StringContent(json));
                    if (response.IsSuccessStatusCode)
                    {
                        Frame.Navigate(typeof(MainPage));
                    }
                    else
                    {
                        Quote_Text.Text = response.StatusCode.ToString();
                        //Returning Unsupported Media Type//
                    }
                }
            }
        }

인용문 및 토픽(모델)

public class Quotes
    {
        public int QuoteId { get; set; }
        public int TopicId { get; set; }
        public string QuoteText { get; set; }
        public string QuoteAuthor { get; set; }
        public Topic Topic { get; set; }
        public string QuoteEffect { get; set; }
    }
    //Topic Model//
    public class Topic
    {
        public int TopicId { get; set; }
        public string TopicName { get; set; }
        public string TopicDescription { get; set; }
        public int TopicAmount { get; set; }
    }

StringContent를 생성할 때 미디어 유형을 설정해야 합니다.

new StringContent(json, Encoding.UTF32, "application/json");

빠르고 더러운 역방향 프록시를 작업하던 중 이 질문을 발견했습니다.JSON이 아니라 폼 데이터가 필요했어요.

이게 날 속였어.

string formData = "Data=SomeQueryString&Foo=Bar";
var result = webClient.PostAsync("http://XXX/api/XXX", 
        new StringContent(formData, Encoding.UTF8, "application/x-www-form-urlencoded")).Result;

지원되지 않는 미디어 유형을 수정하려면 HttpRequestMessage를 사용하여 MediaTypeWithQuality를 가진 json을 받아들이는 헤더를 추가해야 합니다.HeaderValue는 Bellow와 같습니다.

        var httpRequestMessage = new HttpRequestMessage
        {
            Content = new StringContent(json, Encoding.UTF8, "application/json")
        };

        httpRequestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));           

        var httpResponse = await _client.PostAsync("/contacts", httpRequestMessage.Content);

언급URL : https://stackoverflow.com/questions/31526558/unsupported-media-type-error-when-posting-to-web-api

반응형