【问题标题】:Authenticate to Yammer in c# console application在 c# 控制台应用程序中对 Yammer 进行身份验证
【发布时间】:2014-02-05 12:01:44
【问题描述】:

我正在使用 NuGet Yammer API,我正在尝试简单地进行身份验证并将令牌显示为测试。

不幸的是,我似乎无法让它工作。我是新手,但没有关于 NuGet Yammer API 的文档,它将是一个控制台应用程序。 Yammer 开发人员页面上的所有示例和文档都显示了从基于 Web 的应用程序执行此操作。

到目前为止我的代码:

static void Main(string[] args)
{
    var myConfig = new ClientConfigurationContainer
    {

        ClientCode = null,
        ClientId = "CODEHERE",
        ClientSecret = "CODEHERE"
    };
    var myYammer = new YammerClient(myConfig);
    var test = myYammer.GetToken();
    Console.WriteLine("Token" + test);
    Console.ReadLine();
}

【问题讨论】:

  • 以防万一:您是否将 ClientId 和 ClientSecret 放入您的代码中? :)
  • 是的,哈哈……我把它们删了,然后在这里发帖:)
  • 没有错误,只是没有显示任何令牌...我只是在显示的控制台窗口中看到“令牌”一词
  • 在我停止应用程序后,我在 RestSharp.dll 中得到“System.Runtime.Serialization.SerializationException”,但这可能只是因为我结束了应用程序?
  • 发生的情况是 API 包装器没有考虑来自 Yammer 的 JSON 响应中的某些值。您需要查看 SerializationException 的 InnerException。当你使用像 C# 这样的静态语言时,你需要特别考虑如何处理 JSON 中的 null 情况,否则就会出现这个问题。

标签: c# yammer


【解决方案1】:

这是一个OAuth authentication,您必须与 Yammer OAuth 网页交互才能获取令牌。

您应该在Github 的源代码中查看 asp.net mvc 示例。

在 HomeController.cs 中:

[HttpPost]
public ActionResult Index(IndexViewModel model)
{
    if (ModelState.IsValid)
    {
        var myConfig = new ClientConfigurationContainer
        {
            ClientCode = null,
            ClientId = model.ClientId,
            ClientSecret = model.ClientSecret,
            RedirectUri = Request.Url.AbsoluteUri + Url.Action("AuthCode")
        };

        var myYammer = new YammerClient(myConfig);

        // Obtain the URL of Yammer Authorisation Page
        var url = myYammer.GetLoginLinkUri();

        this.TempData["YammerConfig"] = myConfig;

        // Jump to the url page
        return Redirect(url);
    }
    return View(model);
}

Yammer 将您重定向到此处:

public ActionResult AuthCode(String code)
{
    if (!String.IsNullOrWhiteSpace(code))
    {
        var myConfig = this.TempData["YammerConfig"] as ClientConfigurationContainer;
        myConfig.ClientCode = code;
        var myYammer = new YammerClient(myConfig);
        // var yammerToken = myYammer.GetToken();
        // var l = myYammer.GetUsers();
        // var t= myYammer.GetImpersonateTokens();
        // var i = myYammer.SendInvitation("test@test.fr");
        // var m = myYammer.PostMessage("A test from here", 0, "Event");
        return View(myYammer.GetUserInfo());
    }
    return null;
}

【讨论】:

  • API 中似乎存在错误。在 GetAccessToken() 中的 YammerClient.cs 中,它需要将 false 传递给使用主体,因为它是 GET 命令,但这是失败的。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多