问题描述
你好
我正在使用用于Google和Yahoo Login的oAuth.下面是代码.
这是代码对于localhost来说工作正常,当我在实时服务器上上传此文件时,它显示
编译器错误消息:CS1031:预期类型
错误在这条线上
Hello
I am using oAuth for Google and Yahoo Login Below is the code.
this is code is working fine for localhost and when I uploaded this file on the live server it is showing
Compiler Error Message: CS1031: Type expected
error is on this line
public static string GetStringValue(this Enum value)
该代码用于OAuthUtils.cs
this code is for OAuthUtils.cs
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
namespace Matlus.FederatedIdentity
{
// Reference page on Google: http://code.google.com/apis/accounts/docs/OAuth_ref.html
// Reference page on Twitter: http://dev.twitter.com/pages/auth#at-twitter
// Reference page on Yahoo: http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html
// Reference page on Vimeo: http://vimeo.com/api/docs/oauth
public class OAuthUtils
{
#region Private Nested Classes
private class ProtocolParameter
{
public string Name { get; private set; }
public string Value { get; private set; }
public ProtocolParameter(string name, string value)
{
Name = name;
Value = value;
}
}
private class LexicographicComparer : IComparer<protocolparameter>
{
public int Compare(ProtocolParameter x, ProtocolParameter y)
{
if (x.Name == y.Name)
return string.Compare(x.Value, y.Value);
else
return string.Compare(x.Name, y.Name);
}
}
#endregion Private Nested Classes
//http://en.wikipedia.org/wiki/Percent-encoding
private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]";
private const string OAuthVersion = "1.0";
private const string OAuthProtocolParameterPrefix = "oauth_";
private static Random random = new Random();
#region Private static methods
private static string GenerateTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1);
return Math.Truncate(ts.TotalSeconds).ToString();
}
private static string GenerateNonce(string timestamp)
{
var buffer = new byte[256];
random.NextBytes(buffer);
var hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(buffer));
return ComputeHash(hmacsha1, timestamp);
}
private static string ComputeHash(HashAlgorithm hashAlgorithm, string data)
{
if (hashAlgorithm == null)
throw new ArgumentNullException("hashAlgorithm");
if (string.IsNullOrEmpty(data))
throw new ArgumentNullException("data");
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(data);
byte[] bytes = hashAlgorithm.ComputeHash(buffer);
return Convert.ToBase64String(bytes);
}
private static string NormalizeProtocolParameters(IList<protocolparameter> parameters)
{
var sb = new StringBuilder();
ProtocolParameter p = null;
for (int i = 0; i < parameters.Count; i++)
{
p = parameters[i];
sb.AppendFormat("{0}={1}", p.Name, UrlEncode(p.Value));
if (i < parameters.Count - 1)
{
sb.Append("&");
}
}
return sb.ToString();
}
private static List<protocolparameter> ExtractQueryStrings(string url)
{
int questionIndex = url.IndexOf('?');
if (questionIndex == -1)
return new List<protocolparameter>();
var parameters = url.Substring(questionIndex + 1);
var result = new List<protocolparameter>();
if (!String.IsNullOrEmpty(parameters))
{
string[] parts = parameters.Split('&');
foreach (var part in parts)
{
if (!string.IsNullOrEmpty(part) && !part.StartsWith(OAuthProtocolParameterPrefix))
{
if (part.IndexOf('=') != -1)
{
string[] nameValue = part.Split('=');
result.Add(new ProtocolParameter(nameValue[0], nameValue[1]));
}
else
result.Add(new ProtocolParameter(part, String.Empty));
}
}
}
return result;
}
private string GenerateSignatureBaseString(string url, string httpMethod, List<protocolparameter> protocolParameters)
{
protocolParameters.Sort(new LexicographicComparer());
var uri = new Uri(url);
var normalizedUrl = string.Format("{0}://{1}", uri.Scheme, uri.Host);
if (!((uri.Scheme == "http" && uri.Port == 80) || (uri.Scheme == "https" && uri.Port == 443)))
normalizedUrl += ":" + uri.Port;
normalizedUrl += uri.AbsolutePath;
var normalizedRequestParameters = NormalizeProtocolParameters(protocolParameters);
StringBuilder signatureBaseSb = new StringBuilder();
signatureBaseSb.AppendFormat("{0}&", httpMethod);
signatureBaseSb.AppendFormat("{0}&", UrlEncode(normalizedUrl));
signatureBaseSb.AppendFormat("{0}", UrlEncode(normalizedRequestParameters));
return signatureBaseSb.ToString();
}
private static string GenerateSignature(string consumerSecret, SignatureMethod signatureMethod, string signatureBaseString, string tokenSecret)
{
tokenSecret = null;
switch (signatureMethod)
{
case SignatureMethod.HMACSHA1:
var hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(String.Format("{0}&{1}", UrlEncode(consumerSecret), String.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));
return ComputeHash(hmacsha1, signatureBaseString);
case SignatureMethod.PLAINTEXT:
throw new NotImplementedException("PLAINTEXT Signature Method type is not yet implemented");
case SignatureMethod.RSASHA1:
throw new NotImplementedException("RSA-SHA1 Signature Method type is not yet implemented");
default:
throw new ArgumentException("Unknown Signature Method", "signatureMethod");
}
}
#endregion Private static methods
#region Public Static Methods
public static string UrlEncode(string value)
{
if (String.IsNullOrEmpty(value))
return String.Empty;
var sb = new StringBuilder();
foreach (char @char in value)
{
if (reservedCharacters.IndexOf(@char) == -1)
sb.Append(@char);
else
sb.AppendFormat("%{0:X2}", (int)@char);
}
return sb.ToString();
}
#endregion Public Static Methods
public AuthorizeHeader GetRequestTokenAuthorizationHeader(string url, string realm, string consumerKey, string consumerSecret, string callbackUrl, SignatureMethod signatureMethod , string httpMethod)
{
var urlEncodedCallback = UrlEncode(callbackUrl);
var timestamp = GenerateTimeStamp();
var nounce = GenerateNonce(timestamp);
signatureMethod = SignatureMethod.HMACSHA1;
httpMethod = "POST";
var protocolParameters = ExtractQueryStrings(url);
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.ConsumerKey.GetStringValue(), consumerKey));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.SignatureMethod.GetStringValue(), signatureMethod.GetStringValue()));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Timestamp.GetStringValue(), timestamp));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Nounce.GetStringValue(), nounce));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Version.GetStringValue(), OAuthVersion));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Callback.GetStringValue(), callbackUrl));
string signatureBaseString = GenerateSignatureBaseString(url, httpMethod, protocolParameters);
var signature = GenerateSignature(consumerSecret, signatureMethod, signatureBaseString,consumerKey);
return new AuthorizeHeader(realm, consumerKey, signatureMethod.GetStringValue(), signature, timestamp, nounce, OAuthVersion, callbackUrl);
}
public AuthorizeHeader GetAccessTokenAuthorizationHeader(string url, string realm, string consumerKey, string consumerSecret, string token, string verifier, string tokenSecret, SignatureMethod signatureMethod, string httpMethod)
{
var timestamp = GenerateTimeStamp();
var nounce = GenerateNonce(timestamp);
signatureMethod = SignatureMethod.HMACSHA1;
httpMethod = "POST";
var protocolParameters = ExtractQueryStrings(url);
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.ConsumerKey.GetStringValue(), consumerKey));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.SignatureMethod.GetStringValue(), signatureMethod.GetStringValue()));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Timestamp.GetStringValue(), timestamp));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Nounce.GetStringValue(), nounce));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Version.GetStringValue(), OAuthVersion));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Token.GetStringValue(), token));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Verifier.GetStringValue(), verifier));
string signatureBaseString = GenerateSignatureBaseString(url, httpMethod, protocolParameters);
System.Diagnostics.Debug.WriteLine(signatureBaseString);
var signature = GenerateSignature(consumerSecret, signatureMethod, signatureBaseString, tokenSecret);
return new AuthorizeHeader(realm, consumerKey, signatureMethod.GetStringValue(), signature, timestamp, nounce, OAuthVersion, token, verifier);
}
public AuthorizeHeader GetUserInfoAuthorizationHeader(string url, string realm, string consumerKey, string consumerSecret, string token, string tokenSecret, SignatureMethod signatureMethod, string httpMethod)
{
signatureMethod = SignatureMethod.HMACSHA1;
httpMethod = "POST";
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine(token);
System.Diagnostics.Debug.WriteLine(tokenSecret);
System.Diagnostics.Debug.WriteLine("----");
var timestamp = GenerateTimeStamp();
var nounce = GenerateNonce(timestamp);
var protocolParameters = ExtractQueryStrings(url);
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.ConsumerKey.GetStringValue(), consumerKey));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.SignatureMethod.GetStringValue(), signatureMethod.GetStringValue()));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Timestamp.GetStringValue(), timestamp));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Nounce.GetStringValue(), nounce));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Version.GetStringValue(), OAuthVersion));
protocolParameters.Add(new ProtocolParameter(OAuthProtocolParameter.Token.GetStringValue(), token));
string signatureBaseString = GenerateSignatureBaseString(url, httpMethod, protocolParameters);
System.Diagnostics.Debug.WriteLine(signatureBaseString);
var signature = GenerateSignature(consumerSecret, signatureMethod, signatureBaseString, tokenSecret);
return new AuthorizeHeader(realm, consumerKey, signatureMethod.GetStringValue(), signature, timestamp, nounce, OAuthVersion, token, null);
}
}
public enum SignatureMethod
{
[EnumStringValueAttribute("HMAC-SHA1")]
HMACSHA1,
[EnumStringValueAttribute("RSA-SHA1")]
RSASHA1,
[EnumStringValueAttribute("PLAINTEXT")]
PLAINTEXT
}
internal enum OAuthProtocolParameter
{
[EnumStringValueAttribute("oauth_consumer_key")]
ConsumerKey,
[EnumStringValueAttribute("oauth_signature_method")]
SignatureMethod,
[EnumStringValueAttribute("oauth_signature")]
Signature,
[EnumStringValueAttribute("oauth_timestamp")]
Timestamp,
[EnumStringValueAttribute("oauth_nonce")]
Nounce,
[EnumStringValueAttribute("oauth_version")]
Version,
[EnumStringValueAttribute("oauth_callback")]
Callback,
[EnumStringValueAttribute("oauth_verifier")]
Verifier,
[EnumStringValueAttribute("oauth_token")]
Token,
[EnumStringValueAttribute("oauth_token_secret")]
TokenSecret
}
[AttributeUsage(AttributeTargets.Field)]
public class EnumStringValueAttribute : Attribute
{
public string Value { get; private set; }
public EnumStringValueAttribute(string value)
{
Value = value;
}
}
public static class EnumStringValueExtension
{
//this Enum value;
public static string GetStringValue(this Enum value)
{
string output = null;
Type type = value.GetType();
FieldInfo fieldInfo = type.GetField(value.ToString());
EnumStringValueAttribute[] attributes = fieldInfo.GetCustomAttributes(typeof(EnumStringValueAttribute), false) as EnumStringValueAttribute[];
if (attributes.Length > 0)
output = attributes[0].Value;
return output;
}
}
}
</protocolparameter></protocolparameter></protocolparameter></protocolparameter></protocolparameter></protocolparameter>
现在,该问题的解决方案是什么.
谁能建议我,以便我解决这个问题
谢谢,
Deepak
Now , What is the solution for this problem.
Can anyone suggest me so that I can solve this problem
Thanks,
Deepak
推荐答案
Now , What is the solution for this problem.
Can anyone suggest me so that I can solve this problem
谢谢,
Deepak
Now , What is the solution for this problem.
Can anyone suggest me so that I can solve this problem
Thanks,
Deepak
public static string GetStringValue(this Enum value)
My best guess is that the live server is not running version 3.0 or higher of the .NET framework. Extension methods were introduced at V3.0, so to earlier versions the syntax is meaningless.
My best guess is that the live server is not running version 3.0 or higher of the .NET framework. Extension methods were introduced at V3.0, so to earlier versions the syntax is meaningless.
这篇关于OAuthUtils.cs的Live Server问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!