awaisshabir Ответов: 0

Как передать большую строку json в web api ?


я пытаюсь передать большие данные json в web api, но web api получил null.

Web Api Config:
<pre><system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="500000000" />
      </webServices>
    </scripting>
  </system.web.extensions>


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

вызывающий код c# :
using (System.Net.WebClient client = new System.Net.WebClient())
                {
                    client.Headers[HttpRequestHeader.ContentType] = "application/json";
                    client.Headers[HttpRequestHeader.Accept] = "application/json";
                    var JSONRequest = Newtonsoft.Json.JsonConvert.SerializeObject(_mailContract);
                    string _URL = string.Format("{0}{1}", _basicAddress, "api/Email/SendEmail");
                    var response = client.UploadString(_URL, "POST", JSONRequest);

                }


Код веб-Api:
[HttpPost, Route("api/Email/SendEmail")]
       public  HttpResponseMessage SendEmail([FromBody]EmailModel EmailServices)
       {
           HttpResponseMessage response = new HttpResponseMessage();
           try
           {
               if (EmailServices !=null)
               {
                   List<System.Data.SqlClient.SqlParameter> list = new List<System.Data.SqlClient.SqlParameter>();
                   list.Add(new System.Data.SqlClient.SqlParameter("@SetupID", EmailServices.SetupID));
                   list.Add(new System.Data.SqlClient.SqlParameter("@ProjectId", EmailServices.ProjectID));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailType", EmailServices.EmailType));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailTo", EmailServices.EmailTo));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailCC", EmailServices.EmailCC));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailBCC", EmailServices.EmailBCC));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailSubject", EmailServices.EmailSubject));
                   list.Add(new System.Data.SqlClient.SqlParameter("@EmailBody", EmailServices.EmailBody));


                   DbCalling.ExexuteSp("CreateEmailQueue", list.ToArray());
               }
           }
           catch (Exception ex)
           {

               return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Error in Getting For Sending Emails. " + ex.Message);
           }
           return response;
       }

j snooze

Вы проверили, что код работает с небольшим набором данных?

awaisshabir

да он прекрасно работает с небольшим набором данных но когда я помещаю большие данные то класс модели web api получает null

Nayan Ambaliya

Я думаю, что объект, который вы сериализуете при вызове веб-службы, имеет несоответствие свойств (орфографическая ошибка или несуществующее свойство) с объектом класса, который является входным для веб-метода.

Проверьте свойства, которые вы передаете как JSON в качестве входных данных

Это может быть правильно - но только одна точка отказа.

Richard Deeming

NB: То jsonSerialization элемент не влияет на запросы WebApi. Это влияет только на ответы от старых служб WCF/WebService.

Для WebApi вам нужно посмотреть на system.web/httpRuntime/@maxRequestLength (в килобайтах) и system.webServer/security/requestFiltering/requestLimits/@maxAllowedContentLength (в байтах).

0 Ответов