2012-08-22 2 views
2

웹 API 서비스에 게시하려고합니다. 중요한 점은 메시지를 보내는 동안웹 API의 특수 문자로 인해 값이 설정되지 않았습니다.

{ message: "it is done" } 

잘 작동한다는 것입니다. 그러나 내 메시지에서 çıöpş과 같은 특수 문자를 사용하면 게시물 객체가 null로 유지되도록 json을 변환 할 수 없습니다. 내가 무엇을 할 수 있을지? 현재의 문화 문제이거나 다른 것입니다. 내가 HttpUtility 클래스 인코딩 HtmlEncoded 스타일로 내 게시 매개 변수를 보내려고했지만 중 하나를 작동하지 않았다.

+1

이 코드를 제시해주십시오. 웹 API에 요청을 보내는 것이 가장 중요합니다. 또한 웹 API 조치가 도움이 될 수 있습니다. 코드를 표시하지 않고 코드가 작동하지 않는 이유를 어떻게 알 수 있습니까? 그것은 말도 안돼. –

+1

내 의견을 편집하여 도움이되기를 바랍니다. – kkocabiyik

+0

'client.Encoding = Encoding.UTF8;'시도해 봤어? –

답변

6

하나의 가능성은 UploadDataAsync 방법 등을 사용하는

public class Animal{ 

    public string Message {get;set;} 
} 

웹 API 방법

public void DoSomething(Animal a){ 

} 

클라이언트

Animal a = new Animal(); 
a.Message = "öçşistltl"; 
string postDataString = JsonConvert.SerializeObject(a);   
string URL = "http://localhost/Values/DoSomething"; 
WebClient client = new WebClient(); 

client.UploadStringCompleted += client_UploadStringCompleted; 
client.Headers["Content-Type"] = "application/json;charset=utf-8"; 
client.UploadStringAsync(new Uri(URL), "POST",postDataString); 

안부,

케말입니다 사용중인 UploadStringAsync 메소드가 기본적으로 Encoding.Default을 사용하여 소켓에 데이터를 인코딩 할 때 데이터를 인코딩 할 때 UTF-8을 지정해야합니다. 따라서 시스템이 UTF-8 이외의 다른 인코딩을 사용하도록 구성되어 있다면 UploadStringAsync은 시스템 인코딩을 사용하지만 콘텐츠 유형 헤더에서는 charset=utf-8이 충돌 할 수 있기 때문에 문제가 발생합니다. UploadDataAsync 방법으로

당신은 당신의 의도에 더 명시 될 수있다 :

Animal a = new Animal(); 
a.Message = "öçşistltl"; 
string postDataString = JsonConvert.SerializeObject(a);   
string URL = "http://localhost/Values/DoSomething"; 
string postDataString = JsonConvert.SerializeObject(a); 
using (WebClient client = new WebClient()) 
{ 
    client.UploadDataCompleted += client_UploadDataCompleted; 
    client.Headers["Content-Type"] = "application/json; charset=utf-8"; 
    client.UploadDataAsync(new Uri(URI), "POST", Encoding.UTF8.GetBytes(postDataString)); 
} 

또 다른 가능성은 클라이언트의 인코딩을 지정하고 사용하는 것입니다 UploadStringAsync :

Animal a = new Animal(); 
a.Message = "öçşistltl"; 
string postDataString = JsonConvert.SerializeObject(a);   
string URL = "http://localhost/Values/DoSomething"; 
string postDataString = JsonConvert.SerializeObject(a); 
using (WebClient client = new WebClient()) 
{ 
    client.Encoding = Encoding.UTF8; 
    client.UploadStringCompleted += client_UploadStringCompleted; 
    client.Headers["Content-Type"] = "application/json; charset=utf-8"; 
    client.UploadStringAsync(new Uri(URI), "POST", postDataString); 
} 

또는 Microsoft.AspNet.WebApi.Client NuGet 패키지를 cl에 설치하는 경우 ient 직접 WebClient 대신 WebAPI를 소비 (블록에 새로운 아이이다) 새로운 HttpClient 클래스를 사용할 수 있습니다

Animal a = new Animal(); 
a.Message = "öçşistltl"; 
var URI = "http://localhost/Values/DoSomething"; 
using (var client = new HttpClient()) 
{ 
    client 
     .PostAsync<Animal>(URI, a, new JsonMediaTypeFormatter()) 
     .ContinueWith(x => x.Result.Content.ReadAsStringAsync().ContinueWith(y => 
     { 
      Console.WriteLine(y.Result); 
     })) 
     .Wait(); 
} 
+0

JsonConvert는 오픈 소스 어셈블리에 정의되어 있습니까? 봤 거든 .Newtonsoft.Json assembly를 찾았 어. 또는 Microsoft에서 제공하는 어셈블리에서 JsonConvert가 정의되어 있습니까? – user1338998

+0

마이크로 소프트가 웹 API와 함께 배포하고있는 오픈 소스 Newtonsoft.Json 패키지의 일부입니다. –

관련 문제