2017-08-16 82 views
1

我有一個我創建的web api,只要對象Content-Type爲application/json,就可以接收JSON對象。我們希望使用移動設備的protobuf將數據發送到web api。如果我切換內容類型x-protobuf,儘管具有這種格式添加到我的WebApiConfig在Web Api中支持Protobuf-net請求

 config.Formatters.Add(new ProtoBufFormatter()); 

當我使用Chrome擴展「高級REST客戶端」或提琴手,它看起來像在Web API將發送一個序列化當我做一個Get的時候做出迴應,但是當設置爲protobuf時我沒有看到它接收到post請求。

從控制器類的測試方法頭部看起來像這樣至今:

[HttpPost] 
    public override async Task<LoginResponse> Post([FromBody]LoginRequest request) 
    {...} 

更重要的是,我需要保證我的WebAPI將反序列化的protobuf序列化的要求。

你需要什麼幫助?請並且感謝您的考慮。

回答

1

客戶端必須發送帶有protobuf序列化的請求。高級休息客戶端(或Fiddler)不會序列化對象。我寫了一個測試用具客戶端,將對象序列化,如

byte[] rawBytes = ProtoBufSerializer.ProtoSerialize<LoginRequest>(loginRequest); 

     var client = new HttpClient(); 
     client.BaseAddress = new Uri("http://localhost/"); 
     client.DefaultRequestHeaders.Accept.Add(
      new MediaTypeWithQualityHeaderValue("application/x-protobuf")); 

     var byteArrayContent = new ByteArrayContent(rawBytes); 
     byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-protobuf"); 

     var result = client.PostAsync("Api/Login", byteArrayContent).Result;