积极答复者
Help!Help! this function GetAccessToken() return value always null.....

问题
-
VS2008 ASP.NET 2.0
Code:
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Runtime.Serialization.Json; using System.Runtime.Serialization; using System.Web; using System.ServiceModel.Channels; using System.ServiceModel; namespace MicrosoftTranslatorSdk.HttpSamples { class Program { static void Main(string[] args) { AdmAccessToken admToken; string headerValue; //Get Client Id and Client Secret from https://datamarket.azure.com/developer/applications/ //Edit by RedCat 2012-5-18 in this page Get Client Id and Client Secret !!!!! //Refer obtaining AccessToken (http://msdn.microsoft.com/en-us/library/hh454950.aspx) AdmAuthentication admAuth = new AdmAuthentication("clientID", "client secret"); try { admToken = admAuth.GetAccessToken(); // Create a header with the access_token property of the returned token headerValue = "Bearer " + admToken.access_token; DetectMethod(headerValue); } catch (WebException e) { ProcessWebException(e); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); } } private static void DetectMethod(string authToken) { Console.WriteLine("Enter Text to detect language:"); string textToDetect = Console.ReadLine(); //Keep appId parameter blank as we are sending access token in authorization header. string uri = "http://api.microsofttranslator.com/v2/Http.svc/Detect?text=" + textToDetect; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.Headers.Add("Authorization", authToken); WebResponse response = null; try { response = httpWebRequest.GetResponse(); using (Stream stream = response.GetResponseStream()) { System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String")); string languageDetected = (string)dcs.ReadObject(stream); Console.WriteLine(string.Format("Language detected:{0}", languageDetected)); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); } } catch { throw; } finally { if (response != null) { response.Close(); response = null; } } } private static void ProcessWebException(WebException e) { Console.WriteLine("{0}", e.ToString()); // Obtain detailed error information string strResponse = string.Empty; using (HttpWebResponse response = (HttpWebResponse)e.Response) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(responseStream, System.Text.Encoding.ASCII)) { strResponse = sr.ReadToEnd(); } } } Console.WriteLine("Http status code={0}, error message={1}", e.Status, strResponse); } } [DataContract] public class AdmAccessToken { [DataMember] private string _access_token; public string access_token { get { return _access_token; } set { _access_token = value; } } [DataMember] private string _token_type; public string token_type { get { return _token_type; } set { _token_type = value; } } [DataMember] private string _expires_in; public string expires_in { get { return _expires_in; } set { _expires_in = value; } } [DataMember] private string _scope; public string scope { get { return _scope; } set { _scope = value; } } } public class AdmAuthentication { public static readonly string DatamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"; private string clientId; private string cientSecret; private string request; public AdmAuthentication(string clientId, string clientSecret) { this.clientId = clientId; this.cientSecret = clientSecret; //If clientid or client secret has special characters, encode before sending request this.request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret)); } public AdmAccessToken GetAccessToken() { return HttpPost(DatamarketAccessUri, this.request); } private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails) { //Prepare OAuth request WebRequest webRequest = WebRequest.Create(DatamarketAccessUri); webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.Method = "POST"; byte[] bytes = Encoding.ASCII.GetBytes(requestDetails); webRequest.ContentLength = bytes.Length; using (Stream outputStream = webRequest.GetRequestStream()) { outputStream.Write(bytes, 0, bytes.Length); } using (WebResponse webResponse = webRequest.GetResponse()) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken)); //Get deserialized object from JSON stream AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream()); return token; } return null; } } }
-------------------------------------------------------------------------
aspx Page_Load Code:
AdmAccessToken admToken; string headerValue; //Get Client Id and Client Secret from https://datamarket.azure.com/developer/applications/ AdmAuthentication admAuth = new AdmAuthentication("45325432453543", "eb5WLTSpFDgigkDBhlkjgsvuS3jDkRCcK"); admToken = admAuth.GetAccessToken(); // Create a header with the access_token property of the returned token headerValue = "Bearer" + " " + HttpUtility.UrlEncode(admToken.access_token);
-----------------------------------------------------------------------------------------------------------------------------
Question:
clientId,clientSecret No problem.but
admToken = admAuth.GetAccessToken();
admToken.access_token
Always Return Null. I have a headache, do not know where the problem.
Urgent, please help me!
- 已编辑 RedCat01 2012年5月18日 3:54
答案
-
Hi RedCat,
It seems that you made a wrong data class, please change it like this and try again:
[DataContract] public class AdmAccessToken { [DataMember] public string access_token; [DataMember] public string token_type; [DataMember] public string expires_in; [DataMember] public string scope; }
Best regards,
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Mike FengModerator 2012年5月31日 11:31