Никакой 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
Круто! Скажите, если это сработает!