C#에서의 json 콜
C#을 사용하여 json 콜을 하려고 합니다.콜을 작성하려고 시도했지만 작동하지 않았습니다.
public bool SendAnSMSMessage(string message)
{
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://api.pennysms.com/jsonrpc");
request.Method = "POST";
request.ContentType = "application/json";
string json = "{ \"method\": \"send\", "+
" \"params\": [ "+
" \"IPutAGuidHere\", "+
" \"msg@MyCompany.com\", "+
" \"MyTenDigitNumberWasHere\", "+
" \""+message+"\" " +
" ] "+
"}";
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();
return true;
}
이 일을 어떻게 해야 할지 조언해주시면 감사하겠습니다.
코드에서는 HttpResponse를 수신할 수 없기 때문에 서버 측에서 무엇을 반환하는지 알 수 없습니다.
요청을 받는 방법과 유사한 응답을 받아야 합니다.그렇게
public static bool SendAnSMSMessage(string message)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.pennysms.com/jsonrpc");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{ \"method\": \"send\", " +
" \"params\": [ " +
" \"IPutAGuidHere\", " +
" \"msg@MyCompany.com\", " +
" \"MyTenDigitNumberWasHere\", " +
" \"" + message + "\" " +
" ] " +
"}";
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
//Now you have your response.
//or false depending on information in the response
return true;
}
}
또, pennysms 의 문서에서는, 컨텐츠 타입의 「애플리케이션/json」이 아닌 「텍스트/json」이 요구되고 있는 것을 알 수 있습니다.그런다고 달라질 건 없겠지만, 안 될 경우를 대비해서 시도해 볼 만해요.
@Mulki가 자신의 코드로 만든 것을 계속합니다.
public string WebRequestinJson(string url, string postData)
{
string ret = string.Empty;
StreamWriter requestWriter;
var webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
if (webRequest != null)
{
webRequest.Method = "POST";
webRequest.ServicePoint.Expect100Continue = false;
webRequest.Timeout = 20000;
webRequest.ContentType = "application/json";
//POST the data.
using (requestWriter = new StreamWriter(webRequest.GetRequestStream()))
{
requestWriter.Write(postData);
}
}
HttpWebResponse resp = (HttpWebResponse)webRequest.GetResponse();
Stream resStream = resp.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
ret = reader.ReadToEnd();
return ret;
}
여기 시브 쿠마가 뉴턴소프트를 사용한 답변의 변형입니다Json(일명 Json).네트워크):
public static bool SendAnSMSMessage(string message)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://api.pennysms.com/jsonrpc");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
var serializer = new Newtonsoft.Json.JsonSerializer();
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
using (var tw = new Newtonsoft.Json.JsonTextWriter(streamWriter))
{
serializer.Serialize(tw,
new {method= "send",
@params = new string[]{
"IPutAGuidHere",
"msg@MyCompany.com",
"MyTenDigitNumberWasHere",
message
}});
}
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
//Now you have your response.
//or false depending on information in the response
return true;
}
}
기능이 MVC 컨트롤러에 있는 경우 아래 코드를 json으로 변환할 사전 개체와 함께 사용할 수 있습니다.
Json(someDictionaryObj, JsonRequestBehavior.AllowGet);
시스템도 살펴보십시오.web.script를 참조해 주세요.serialization.serializer(.net 3.5를 사용하는 경우)
당신의 웹 요청은... 언뜻 보기에는 괜찮은 것 같습니다.
이런 걸 쓰는데...
public void WebRequestinJson(string url, string postData)
{
StreamWriter requestWriter;
var webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
if (webRequest != null)
{
webRequest.Method = "POST";
webRequest.ServicePoint.Expect100Continue = false;
webRequest.Timeout = 20000;
webRequest.ContentType = "application/json";
//POST the data.
using (requestWriter = new StreamWriter(webRequest.GetRequestStream()))
{
requestWriter.Write(postData);
}
}
}
post 문자열과 json 문자열을 파라미터로 하여 모든 콜의 범용 Web 요구 메서드로 사용할 수 있습니다.
이는 시스템을 사용하여 BIDS 2008에서 Json 데이터를 게시하고 Rest API에서 Json 데이터를 가져오는 방법의 샘플에 불과합니다.Net.WebRequest 및 newtonsoft 미사용.이것은 샘플 코드일 뿐이고, 확실히 미세 조정이 가능합니다(테스트가 잘 되어 있고, 제 테스트 목적에 매우 적합합니다).그냥 아이디어를 주기 위해서야저는 이 스레드를 원했지만 찾을 수 없어서 이 글을 올렸습니다.이것들은 내가 이걸 꺼낸 주요 정보원들이다.링크 1 및 링크 2
동작하는 코드(테스트 대상 유닛)
//Get Example
var httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://abc.def.org/testAPI/api/TestFile");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "GET";
var username = "usernameForYourApi";
var password = "passwordForYourApi";
var bytes = Encoding.UTF8.GetBytes(username + ":" + password);
httpWebRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
var httpResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
Dts.Events.FireInformation(3, "result from readng stream", result, "", 0, ref fireagain);
}
//Post Example
var httpWebRequestPost = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://abc.def.org/testAPI/api/TestFile");
httpWebRequestPost.ContentType = "application/json";
httpWebRequestPost.Method = "POST";
bytes = Encoding.UTF8.GetBytes(username + ":" + password);
httpWebRequestPost.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
//POST DATA newtonsoft didnt worked with BIDS 2008 in this test package
//json https://stackoverflow.com/questions/6201529/how-do-i-turn-a-c-sharp-object-into-a-json-string-in-net
// fill File model with some test data
CSharpComplexClass fileModel = new CSharpComplexClass();
fileModel.CarrierID = 2;
fileModel.InvoiceFileDate = DateTime.Now;
fileModel.EntryMethodID = EntryMethod.Manual;
fileModel.InvoiceFileStatusID = FileStatus.NeedsReview;
fileModel.CreateUserID = "37f18f01-da45-4d7c-a586-97a0277440ef";
string json = new JavaScriptSerializer().Serialize(fileModel);
Dts.Events.FireInformation(3, "reached json", json, "", 0, ref fireagain);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
httpWebRequestPost.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = httpWebRequestPost.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = httpWebRequestPost.GetResponse();
// Display the status.
//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
Dts.Events.FireInformation(3, "Display the status", ((HttpWebResponse)response).StatusDescription, "", 0, ref fireagain);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
Dts.Events.FireInformation(3, "responseFromServer ", responseFromServer, "", 0, ref fireagain);
BIDS 2008 내의 테스트 스크립트 태스크 참조(SP1 및 3.5 프레임워크 포함)
언급URL : https://stackoverflow.com/questions/4982765/json-call-with-c-sharp
'programing' 카테고리의 다른 글
WooCommerce는 속성 쿼리를 통해 제품을 가져옵니다. (0) | 2023.03.15 |
---|---|
Wordpress 사용자 또는 데이터베이스로 Firebase/Firechat 인증 (0) | 2023.03.15 |
서비스를 각도 구성 요소에 주입하려고 할 때 오류가 발생했습니다. "예외: 구성 요소의 모든 매개 변수를 해결할 수 없습니다." 이유는 무엇입니까? (0) | 2023.03.15 |
개체를 배열에 푸시하려면 어떻게 해야 합니까? (0) | 2023.03.10 |
MongoDB에서 대소문자를 구분하지 않는 정렬 (0) | 2023.03.10 |