Bullgill Coder Ответов: 1

Никакой mediatypeformatter не доступен для чтения объекта типа "createupdate" из содержимого с типом носителя "text/plain".


Я получаю вышеприведенную ошибку и не знаю, как ее устранить.

В моей модели есть следующее...

public class PUpdate
{
    public int customer_urn { get; set; }
    public int amount { get; set; }
    public string update_type { get; set; }
}

public class CreateUpdate : PUpdate
{
}


и когда я пытаюсь запустить почтовый тест с помощью Postman, я получаю вышеприведенную ошибку.

Контроллер есть

        // POST api/<controller>
        public string Post([FromBody]CreateUpdate value)
        {
            _conPU = new SqlConnection(ConfigurationManager.ConnectionStrings["KRConnectionString"].ConnectionString);

            var query = "insert into KR.L_AMT (ACUID, AMT, aDATE ,COMMENTS) values (@ACUID, 
@AMT, getdate() ,'Web')";
                SqlCommand insertcommand = new SqlCommand(query, _conPU);
                //insertcommand.Parameters.AddWithValue("@ACUID", value.customer_urn );
            //insertcommand.Parameters.AddWithValue("@AMT",value.amount );
            _conPU.Open();
            int result = insertcommand.ExecuteNonQuery();
            if (result > 0)
            {
                return "inserted";
            }
            else
            {
                return "failed";
            }
        }


У меня также есть следующее В моем webapiconfig.cs

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;

config.Formatters.Remove(config.Formatters.XmlFormatter);


Полная ошибка, которую я получаю обратно, такова...

{
    "Message": "An error has occurred.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'CreateUpdate' from content with media type 'text/plain'.",
    "ExceptionType": "System.InvalidOperationException",
    "StackTrace": "   at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)\r\n   at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)\r\n   at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)\r\n   at System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)\r\n   at System.Web.Http.Tracing.Tracers.FormatterParameterBindingTracer.<>c__DisplayClass3.<ExecuteBindingAsync>b__1()\r\n   at System.Web.Http.Tracing.ITraceWriterExtensions.TraceBeginEndAsync(ITraceWriter traceWriter, HttpRequestMessage request, String category, TraceLevel level, String operatorName, String operationName, Action`1 beginTrace, Func`1 execute, Action`1 endTrace, Action`1 errorTrace)\r\n   at System.Web.Http.Tracing.Tracers.FormatterParameterBindingTracer.ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)\r\n   at System.Web.Http.Controllers.HttpActionBinding.<>c__DisplayClass1.<ExecuteBindingAsync>b__0(HttpParameterBinding parameterBinder)\r\n   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()\r\n   at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator`1 enumerator, CancellationToken cancellationToken)"
}


Любые указания на то, что я делаю неправильно, были бы благодарны. Спасибо.

Что я уже пробовал:

Я попытался изменить только одну переменную в json, но все равно получил ту же ошибку. Мои переменные должны быть типа int и String.

Sandeep Mewara

Попробуйте установить эти настройки прокси-сервера:

var handler = new HttpClientHandler(){
Proxy = HttpWebRequest.GetSystemWebProxy()
};

client = new HttpClient(handler);

Sandeep Mewara

Кстати, вы только что упомянули:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));

Я бы предложил добавить "text/plain" также к поддерживаемым типам, чтобы увидеть, что именно возвращается обратно, чтобы убедиться, что ответ будет таким, как ожидалось, и там нет ничего плохого.

Bullgill Coder

Спасибо, просто добавив "текст/обычный" здесь, кажется, решили эту проблему. Использование postman для тестирования теперь записывает данные в базу данных.

Sandeep Mewara

Круто! Скажите, если это сработает!

1 Ответов

Рейтинг:
4

Bullgill Coder

just adding "text/plain" here seems to have resolved the issue. Using postman to test it is now writing data into the database.