How my .NET controller can correctly return a JSON to the client (obtained by an external REST call)
I am pretty new in .NET* (I came from Java) and I have the following problem.
I created this controller class calling an external REST endpoint (it works fine):
namespace MyPrj.Controllers
public class MailProtocolloController : ApiController
private String urlBaseProtocolloApi = "http://myserver.westeurope.cloudapp.azure.com:8081/MY_API";
[SharePointContextWebAPIFilter]
[HttpGet]
[ActionName("GetAooList")]
public IHttpActionResult GetAooList()
Console.WriteLine("INTO GetAooList()");
string jsonRequest = urlBaseProtocolloApi + "/api/ProtocollaMail/GetDepartmentsList";
NetworkCredential myCreds = new NetworkCredential("myname", "mypswd", "mydomain");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(jsonRequest), "NTLM", myCreds);
//credCache.Add(new Uri(jsonRequest), "NTLM", CredentialCache.DefaultNetworkCredentials);
HttpWebRequest spRequest = (HttpWebRequest)HttpWebRequest.Create(jsonRequest);
spRequest.Credentials = credCache;
spRequest.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0";
spRequest.Method = "GET";
spRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse = (HttpWebResponse)spRequest.GetResponse();
//string sResult = "Pippo";
string sResult = endpointResponse.ToString();
/*
using (StreamReader sr = new StreamReader(endpointResponse.GetResponseStream()))
sResult = sr.ReadToEnd();
JObject jobj = JObject.Parse(sResult);
*/
Console.WriteLine(sResult);
return Ok(sResult);
The called REST endpoint (I renamed it for privacy) return a JSON like this:
[
"Name":"Protocollo Generale",
"Value":"PG"
]
My controller have to return this JSON to the client. I tried to do in this way:
string sResult = endpointResponse.ToString();
return Ok(sResult);
but it is not what I need because it returns:
<string>System.Net.HttpWebResponse</string>
instead the desired JSON.
What is the correct way to return this JSON to the client? How can I fix it?
c# asp.net .net asp.net-apicontroller
add a comment |
I am pretty new in .NET* (I came from Java) and I have the following problem.
I created this controller class calling an external REST endpoint (it works fine):
namespace MyPrj.Controllers
public class MailProtocolloController : ApiController
private String urlBaseProtocolloApi = "http://myserver.westeurope.cloudapp.azure.com:8081/MY_API";
[SharePointContextWebAPIFilter]
[HttpGet]
[ActionName("GetAooList")]
public IHttpActionResult GetAooList()
Console.WriteLine("INTO GetAooList()");
string jsonRequest = urlBaseProtocolloApi + "/api/ProtocollaMail/GetDepartmentsList";
NetworkCredential myCreds = new NetworkCredential("myname", "mypswd", "mydomain");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(jsonRequest), "NTLM", myCreds);
//credCache.Add(new Uri(jsonRequest), "NTLM", CredentialCache.DefaultNetworkCredentials);
HttpWebRequest spRequest = (HttpWebRequest)HttpWebRequest.Create(jsonRequest);
spRequest.Credentials = credCache;
spRequest.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0";
spRequest.Method = "GET";
spRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse = (HttpWebResponse)spRequest.GetResponse();
//string sResult = "Pippo";
string sResult = endpointResponse.ToString();
/*
using (StreamReader sr = new StreamReader(endpointResponse.GetResponseStream()))
sResult = sr.ReadToEnd();
JObject jobj = JObject.Parse(sResult);
*/
Console.WriteLine(sResult);
return Ok(sResult);
The called REST endpoint (I renamed it for privacy) return a JSON like this:
[
"Name":"Protocollo Generale",
"Value":"PG"
]
My controller have to return this JSON to the client. I tried to do in this way:
string sResult = endpointResponse.ToString();
return Ok(sResult);
but it is not what I need because it returns:
<string>System.Net.HttpWebResponse</string>
instead the desired JSON.
What is the correct way to return this JSON to the client? How can I fix it?
c# asp.net .net asp.net-apicontroller
endpointResponse.ToString()
does not return useful information. You need to read the response.
– SLaks
Nov 13 '18 at 16:00
1
Why did you use HttpWebRequest instead of HttpClient? You could have usedvar response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either
– Panagiotis Kanavos
Nov 13 '18 at 16:00
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
1
You want something like this but as Panagiotis suggests, you should move toHttpClient
, it's been the default way to do this sort of thing for a long time now.
– DavidG
Nov 13 '18 at 16:02
The client can define if it wants xml or json just by settingcontent-type=application/json
– Max
Nov 13 '18 at 16:28
add a comment |
I am pretty new in .NET* (I came from Java) and I have the following problem.
I created this controller class calling an external REST endpoint (it works fine):
namespace MyPrj.Controllers
public class MailProtocolloController : ApiController
private String urlBaseProtocolloApi = "http://myserver.westeurope.cloudapp.azure.com:8081/MY_API";
[SharePointContextWebAPIFilter]
[HttpGet]
[ActionName("GetAooList")]
public IHttpActionResult GetAooList()
Console.WriteLine("INTO GetAooList()");
string jsonRequest = urlBaseProtocolloApi + "/api/ProtocollaMail/GetDepartmentsList";
NetworkCredential myCreds = new NetworkCredential("myname", "mypswd", "mydomain");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(jsonRequest), "NTLM", myCreds);
//credCache.Add(new Uri(jsonRequest), "NTLM", CredentialCache.DefaultNetworkCredentials);
HttpWebRequest spRequest = (HttpWebRequest)HttpWebRequest.Create(jsonRequest);
spRequest.Credentials = credCache;
spRequest.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0";
spRequest.Method = "GET";
spRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse = (HttpWebResponse)spRequest.GetResponse();
//string sResult = "Pippo";
string sResult = endpointResponse.ToString();
/*
using (StreamReader sr = new StreamReader(endpointResponse.GetResponseStream()))
sResult = sr.ReadToEnd();
JObject jobj = JObject.Parse(sResult);
*/
Console.WriteLine(sResult);
return Ok(sResult);
The called REST endpoint (I renamed it for privacy) return a JSON like this:
[
"Name":"Protocollo Generale",
"Value":"PG"
]
My controller have to return this JSON to the client. I tried to do in this way:
string sResult = endpointResponse.ToString();
return Ok(sResult);
but it is not what I need because it returns:
<string>System.Net.HttpWebResponse</string>
instead the desired JSON.
What is the correct way to return this JSON to the client? How can I fix it?
c# asp.net .net asp.net-apicontroller
I am pretty new in .NET* (I came from Java) and I have the following problem.
I created this controller class calling an external REST endpoint (it works fine):
namespace MyPrj.Controllers
public class MailProtocolloController : ApiController
private String urlBaseProtocolloApi = "http://myserver.westeurope.cloudapp.azure.com:8081/MY_API";
[SharePointContextWebAPIFilter]
[HttpGet]
[ActionName("GetAooList")]
public IHttpActionResult GetAooList()
Console.WriteLine("INTO GetAooList()");
string jsonRequest = urlBaseProtocolloApi + "/api/ProtocollaMail/GetDepartmentsList";
NetworkCredential myCreds = new NetworkCredential("myname", "mypswd", "mydomain");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(jsonRequest), "NTLM", myCreds);
//credCache.Add(new Uri(jsonRequest), "NTLM", CredentialCache.DefaultNetworkCredentials);
HttpWebRequest spRequest = (HttpWebRequest)HttpWebRequest.Create(jsonRequest);
spRequest.Credentials = credCache;
spRequest.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0";
spRequest.Method = "GET";
spRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse = (HttpWebResponse)spRequest.GetResponse();
//string sResult = "Pippo";
string sResult = endpointResponse.ToString();
/*
using (StreamReader sr = new StreamReader(endpointResponse.GetResponseStream()))
sResult = sr.ReadToEnd();
JObject jobj = JObject.Parse(sResult);
*/
Console.WriteLine(sResult);
return Ok(sResult);
The called REST endpoint (I renamed it for privacy) return a JSON like this:
[
"Name":"Protocollo Generale",
"Value":"PG"
]
My controller have to return this JSON to the client. I tried to do in this way:
string sResult = endpointResponse.ToString();
return Ok(sResult);
but it is not what I need because it returns:
<string>System.Net.HttpWebResponse</string>
instead the desired JSON.
What is the correct way to return this JSON to the client? How can I fix it?
c# asp.net .net asp.net-apicontroller
c# asp.net .net asp.net-apicontroller
asked Nov 13 '18 at 15:58
AndreaNobiliAndreaNobili
13.5k59182342
13.5k59182342
endpointResponse.ToString()
does not return useful information. You need to read the response.
– SLaks
Nov 13 '18 at 16:00
1
Why did you use HttpWebRequest instead of HttpClient? You could have usedvar response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either
– Panagiotis Kanavos
Nov 13 '18 at 16:00
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
1
You want something like this but as Panagiotis suggests, you should move toHttpClient
, it's been the default way to do this sort of thing for a long time now.
– DavidG
Nov 13 '18 at 16:02
The client can define if it wants xml or json just by settingcontent-type=application/json
– Max
Nov 13 '18 at 16:28
add a comment |
endpointResponse.ToString()
does not return useful information. You need to read the response.
– SLaks
Nov 13 '18 at 16:00
1
Why did you use HttpWebRequest instead of HttpClient? You could have usedvar response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either
– Panagiotis Kanavos
Nov 13 '18 at 16:00
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
1
You want something like this but as Panagiotis suggests, you should move toHttpClient
, it's been the default way to do this sort of thing for a long time now.
– DavidG
Nov 13 '18 at 16:02
The client can define if it wants xml or json just by settingcontent-type=application/json
– Max
Nov 13 '18 at 16:28
endpointResponse.ToString()
does not return useful information. You need to read the response.– SLaks
Nov 13 '18 at 16:00
endpointResponse.ToString()
does not return useful information. You need to read the response.– SLaks
Nov 13 '18 at 16:00
1
1
Why did you use HttpWebRequest instead of HttpClient? You could have used
var response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either– Panagiotis Kanavos
Nov 13 '18 at 16:00
Why did you use HttpWebRequest instead of HttpClient? You could have used
var response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either– Panagiotis Kanavos
Nov 13 '18 at 16:00
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
1
1
You want something like this but as Panagiotis suggests, you should move to
HttpClient
, it's been the default way to do this sort of thing for a long time now.– DavidG
Nov 13 '18 at 16:02
You want something like this but as Panagiotis suggests, you should move to
HttpClient
, it's been the default way to do this sort of thing for a long time now.– DavidG
Nov 13 '18 at 16:02
The client can define if it wants xml or json just by setting
content-type=application/json
– Max
Nov 13 '18 at 16:28
The client can define if it wants xml or json just by setting
content-type=application/json
– Max
Nov 13 '18 at 16:28
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53284847%2fhow-my-net-controller-can-correctly-return-a-json-to-the-client-obtained-by-an%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53284847%2fhow-my-net-controller-can-correctly-return-a-json-to-the-client-obtained-by-an%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
endpointResponse.ToString()
does not return useful information. You need to read the response.– SLaks
Nov 13 '18 at 16:00
1
Why did you use HttpWebRequest instead of HttpClient? You could have used
var response=await httpClient.GetStringAsync(thatURL);
and retrieve the response. HttpClient won't block either– Panagiotis Kanavos
Nov 13 '18 at 16:00
@SLaks ehhhh how?
– AndreaNobili
Nov 13 '18 at 16:02
1
You want something like this but as Panagiotis suggests, you should move to
HttpClient
, it's been the default way to do this sort of thing for a long time now.– DavidG
Nov 13 '18 at 16:02
The client can define if it wants xml or json just by setting
content-type=application/json
– Max
Nov 13 '18 at 16:28