ASP.Net Web Api не связывает модель на POST из многочастного запроса, вызванного в AngularJs Service - PullRequest
0 голосов
/ 23 января 2019

У меня есть форма, в которой есть некоторые данные, и возможность выбора нескольких файлов может быть файл за файлом или несколькими файлами одновременно или их комбинацией, и отправлять запрос в мой API, но если я сделаю свое действие после публикации, имеет параметр модели и я хочу, чтобы запрос совпадал с действием и связывал данные с моей моделью, но он не срабатывает вообще и дает мне

500 внутренняя ошибка сервера

и это исключение:

{"Сообщение": "Произошла ошибка.", "ExceptionMessage": "Ошибка при получении значение из «ReadTimeout» в "Microsoft.Owin.Host.SystemWeb.CallStreams.InputStream "" ExceptionType. ":" Newtonsoft.Json.JsonSerializationException " "StackTrace":" в Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue (Object цель) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues ​​(JsonWriter писатель, значение объекта, контракт JsonContainerContract, JsonProperty член, свойство JsonProperty, JsonContract & memberContract, Object & memberValue) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeDictionary (JsonWriter писатель, значения IDictionary, контракт JsonDictionaryContract, Член JsonProperty, коллекция JsonContainerContractContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeDictionary (JsonWriter писатель, значения IDictionary, контракт JsonDictionaryContract, Член JsonProperty, коллекция JsonContainerContractContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter писатель, значение объекта, контракт JsonObjectContract, JsonProperty член, JsonContainerContract collectionContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize (JsonWriter jsonWriter, значение объекта, тип objectType) \ r \ n в Newtonsoft.Json.JsonSerializer.SerializeInternal (JsonWriter jsonWriter, значение объекта, тип objectType) \ r \ n в System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream (Тип тип, значение объекта, поток writeStream, кодировка эффективное кодирование) \ r \ n в System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream (Тип тип, значение объекта, поток writeStream, кодировка эффективное кодирование) \ r \ n в System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync (Тип тип, значение объекта, поток writeStream, содержимое HttpContent, TransportContext transportContext, CancellationToken cancellationToken) \ r \ n --- Конец трассировки стека из предыдущего местоположения где было сгенерировано исключение --- \ r \ n вSystem.Runtime.() "," InnerException ": {" Message ":" Произошла ошибка. "," ExceptionMessage ":" Тайм-ауты не поддерживаются в этом потоке. "," ExceptionType ":" System.InvalidOperationException "," StackTrace ":"at System.IO.Stream.get_ReadTimeout () \ r \ n в GetReadTimeout (Object) \ r \ n в Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue (Object target)"}}

Моя форма просмотра выглядит так: enter image description here

Я отправляю данные формы с файлами из сервиса angularJs следующим образом:

var getModelAsFormData = function (data) {
    var dataAsFormData = new FormData();
    angular.forEach(data, function (value, key) {
        if (key == "files") {
            console.log(value);
            for (var i = 0; i < value.length; i++) {
                dataAsFormData.append(value[i].name, value[i]);
            }
        } else {
            dataAsFormData.append(key, value);
        }
    });
    return dataAsFormData;

};

var _saveModel = function (url, data) {
    return $http({                        
        url: url,
        method: "POST",
        data: getModelAsFormData(data),
        headers: { 'Content-Type': undefined }
    }).then(function (response) {
        return response;
    }).catch(function (e) {
        throw e;
    });
}

Определение контроллера API:

[HttpPost]
        [Authorize(Roles = "Supervisor,Admin")]
        public AnnouncementVM Add(AnnouncementVM announcementVM)
        {
          //my code here
        }

ОбъявлениеVM Модель:

 [DataContract()]
    public class AnnouncementVM
    {       
        [DataMember(Name = "title")]
        [Required]
        public string Title { get; set; }
        [DataMember(Name = "content")]
        public string Content { get; set; } 
        [DataMember(Name = "userGroupIds")]
        public List<int> UserGroupIds { get; set; }    
    }

Мой отправленный запрос:

POST http://localhost:3436/services/api/Announcements/Add HTTP/1.1
Host: localhost:3436
Connection: keep-alive
Content-Length: 38535
Accept: application/json, text/plain, */*
Origin: http://localhost:3436
Authorization: Bearer JCaGaQQZUaZiZy2Dm5SZoUAR4SsUrdH-d30XltPlt5N9lF1NoE_IKt_s_CspyMcUAuNJgR6BWXcac3FWnCBd7AUYisR1DYZLE1P-CLLbtZceSx0EwEfIs72UDXeJkibcj2uAspICwuBAfbgx8c8TeVEqAomX3X5FXS7iyv6YYOeVjYmDp2QiWEnCH3_kIrKw8J1L1Zg-VQmTca195ovKSK-EUgWr7TwPAtoDQoBVM2Amr8HC968KRzlmJ46nd3LboSmNgyQr7wM0E0i58PNAOydngdzm5cb5rkpTFnDUIcl6upoxr6D4jgpefSE6X92yA-3PSNhOODSZFh1dDKocHg
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynhBWcGW6vDoTgHdG
Referer: http://localhost:3436/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

------WebKitFormBoundarynhBWcGW6vDoTgHdG
Content-Disposition: form-data; name="userGroupIds"

17,18,19,17,18,19,17,18,19
------WebKitFormBoundarynhBWcGW6vDoTgHdG
Content-Disposition: form-data; name="title"

fkkf
------WebKitFormBoundarynhBWcGW6vDoTgHdG
Content-Disposition: form-data; name="content"

fkkfk
------WebKitFormBoundarynhBWcGW6vDoTgHdG
Content-Disposition: form-data; name="a.PNG"; filename="a.PNG"
Content-Type: image/png

 PNG

....the rest of PNG data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...