OK, sé que su último mensaje fue hace meses, pero en caso de que todavía estaban trabajando en esto (o para gente como yo, que hubiera querido para ver una respuesta a esta pregunta), aquí hay información sobre el NullReferenceException
que encontró al crear la solicitud de OAuth:
La referencia nula proviene del IServiceLocator
que se usa para resolver dependencias. Si no pasa explícitamente uno al constructor, usa la propiedad estática ServiceLocator.Current
en el espacio de nombres Microsoft.Practices.ServiceLocation
.
Este es uno de los muchos inconvenientes del uso de métodos estáticos y el estado global, ¿está ocultando problemas como este al consumidor de su API? Por lo tanto, si no ha especificado un localizador de servicio predeterminado, se devuelve null
, lo que da como resultado NullReferenceException
.
Para solucionar este problema, conecté una implementación de IServiceLocator
que usa StructureMap (uno de los muchos contenedores de IoC disponibles) como contenedor. Por último, tendrá que registrar instancias para dos interfaces: ISigningProvider
y INonceProvider
. Afortunadamente, existen varias implementaciones estándar en el ensamblaje OAuth.Net.Components, como GuidNonceProvider y HmacSha1SigningProvider.
El código resultante se parece a algo como esto:
var container = new Container();
container.Configure(a => a.For<INonceProvider>().Use<GuidNonceProvider>());
container.Configure(a => a.For<ISigningProvider>()
.Use<HmacSha1SigningProvider>()
.Named("signing.provider:HMAC-SHA1"));
var locator = new StructureMapAdapter(container);
ServiceLocator.SetLocatorProvider(delegate { return locator; });
Me di cuenta que no es la solución definitiva a su pregunta original (todavía estoy trabajando en conseguir yo mismo trabajo), pero espero que sea te lleva unos pasos más allá. Y si por mucho tiempo has abandonado esta implementación ... bueno, ¡feliz codificación de todos modos!
Lo sentimos, olvidé mencionar que esto está usando OAuth 1.0a – Redth