2016-10-20 4 views
1

Может кто-нибудь сказать мне, почему я вижу кавычки в моем теле запроса в Fiddler, а в поле запроса службы servicestack нет?Запрос службы без кавычек в корпусе json

POST http://10.255.1.180:8087/testvariables/new/ HTTP/1.1 
Host: 10.255.1.180:8087 
Connection: keep-alive 
Content-Length: 162 
Origin: http://10.255.1.180:8087 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 
content-type: application/json;charset=UTF-8 
Accept: */* 
Referer: http://10.255.1.180:8087/certFields 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,fr;q=0.6 

{"Field":{"Id":67,"Name":"Brightness Reversion","Header":"Brightness Reversion.","Format":"#0.0","Uom":"%","Precision":0,"MapId":8083,"IsMappedToCustomer":false}} 

Вызов из машинописи/Angular2

let body = JSON.stringify(certField);  
let headers = new Headers({ 'Content-Type': 'application/json;charset=utf-8' }); 

let requestoptions: RequestOptions = new RequestOptions({ 
      method: RequestMethod.Post, 
      url: this._certFieldsUrl + 'new/', 
      headers: headers, 
      body: '{"Field":'+body+'}' 
     }) 
return this._http.request(new Request(requestoptions)) 
      .toPromise() 
      .then(function (response) { 
       return response.json() as CertFieldSaveResponse; 
      }) 
      .catch(this.handleError); 

Запрос Класс

public class CertFieldUpdateRequest : IReturn<TestVariableResponse> 
    { 
     public string Field { get; set; } 

    } 

POST Метод

public object Post(CertFieldUpdateRequest request) 
    { 
       log.Debug(request.Field); 
     .... 
    } 

Внутри службы, в методе POST, то значение request.Field:

{Id:67,Name:Brightness Reversion,Header:Brightness Reversion.,Format:#0.0,Uom:%,Precision:0,MapId:8083,IsMappedToCustomer:false} 
+2

потому, что один сырой выход, и один «очищен». JSON без кавычек ** NOT ** valid json. –

+0

изменить '.then (function (response) {' to '.then ((response) => {' и посмотреть и сообщить – micronyks

+0

, как говорит Марк, если последний json, который вы показываете, это то, что вы публикуете, это не сработает. 'var body = {Поле: Тело}'., а затем 'JSON.stringify (body)' –

ответ

2

Его потому, что ваше тело на самом деле является полным json-объектом, а не строкой внутри объекта json. так как:

let requestoptions: RequestOptions = new RequestOptions({ 
     method: RequestMethod.Post, 
     url: this._certFieldsUrl + 'new/', 
     headers: headers, 
     body: {Field : JSON.stringify(body)} 
    }) 

Или сделать свой код класса обладают свойствами:

public class CertFieldUpdateRequest : IReturn<TestVariableResponse> 
    { 
    public Field Field { get; set; } 

    } 

    public class Field 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Header { get; set; } 
     public string Format { get; set; } 
     ///etc... 
    }