2015-05-28 32 views
0

我正在使用MVC应用程序,它将发送电子邮件至JIRA,并提供在JIRA中创建号所需的信息。如何使用ASP.Net MVC应用程序中的webhooks从JIRA中检索信息?

这是成功的,但下一步是检索页面中的信息。目前,我正在显示通过从数据库中检索发送的信息。

问题是我还需要检索KEY状态的问题。这不能只是输入,因为用户不会知道它们是什么,它必须在JIRA中完成。

本来我是打算使用API​​来从JIRA获得信息,但由于JIRA网站不在线托管的API不符合访问控制 - 允许 - 头”头。

我被告知,我将不得不使用网络挂接来获取信息,但我不知道如何去了解这一点。

我知道,我必须先注册该我做的通过的JIRA管理UI网络挂接我所知道的是如何以m为单位检索信息y应用程序使用webhooks,我知道webhooks必须有友好名称为webhook创建,的URL其中回拨应发送。

网络挂接的范围事件张贴到URL,可以是“所有事件”或一组特定的事件。

我也知道,如果添加到创建问题工作流程转换中,Post函数Web挂钩不会触发。我们建议您将web钩子配置为从issue_created事件触发。

因此,如何能我成功地检索这些信息,我目前正在此:

Public Function Webhook() As ActionResult 
     Dim status As String = "Status" 
     If Request("secret") <> status Then 
      Response.StatusCode = 403 
      Return Content("Invalid status secret") 
     End If 
     If Request("event") = "incoming_messages" Then 
      Dim Key As String = Request("Key") 
      Dim jiraStatus As String = Request("status") 

      Dim reply As Dictionary(Of String, Object) = New Dictionary(Of String, Object)() 
      reply("content") = "Thanks for your submission!" 

      Dim result As Dictionary(Of String, Object) = New Dictionary(Of String, Object)() 
      result("messages") = New Object() {reply} 

      Return Json(result) 

     Else 
      Response.StatusCode = 400 
      Return Content("Unknown event") 
     End If 

     Return View() 
    End Function 

但我敢肯定,我做错了,做什么步骤我需要遵循正确地做到这一点?

更新

应该在哪里我的网络挂接网址大火目前,我把它发送到RequestB.in测试这是工作,但我应该在哪里火它来获取我的MVC应用程序的信息?是否应该向MVC应用程序开火,如果是的话应该在哪里开火。

我该如何处理目前在我的MVC应用程序中的Json有效载荷,我试图反序列化它,但是我之前没有这样做,并且不确定如何将Json有效载荷与应用程序连接起来。这是我到目前为止已经试过:

 Request.InputStream.Position = 0 
     Request.InputStream.Seek(0, SeekOrigin.Begin) 
     Using reader = New StreamReader(Request.InputStream) 

      Dim jiraJson = reader.ReadToEnd() 
      Dim contentType As String = Request.ContentType 
      Dim body = JsonConvert.DeserializeObject(jiraJson) 

      Try 
       Select Case DirectCast(body.key, String) 
        Case "" 
         Return Json(jiraJson) 

        Case Else 
         Return Json(jiraJson) 


       End Select 
      Catch ex As Exception 

      End Try 
     End Using 

     Return View() 

我不清楚该怎么在switch语句位置,并且如何返回JSON,然后显示它,我该怎么办呢?

回答

2

如果我正确理解你,怎么这应该工作的高级过程是:

  • 发送一封电子邮件给吉拉。
  • 在给定项目下创建一个问题,该问题触发webhook。
  • webhook会将JSON有效负载发送到您指定的URL。
  • URL应该是您的MVC应用程序中的一个公共路由,它消耗并处理请求。

因此,如果你已经在哪里,你需要消费的webhook是一个可公开访问的MVC路由。比方说,你有一个名为“JiraUpdateController”控制器,以及控制器上存在一个名为“ProcessWebhook”的方法:

public class JiraUpdateController : Controller 
{ 
    /// <summary> 
    /// Set our default base logger for the update tasks 
    /// </summary> 
    private static readonly Logger logger = LogManager.GetCurrentClassLogger(); 

    public static Logger Log 
    { 
     get { return logger; } 
    } 

    [HttpPost] 
    public ActionResult ProcessWebhook() 
    { 
     // Process the JSON payload here accordingly. 
    }  
} 

现在,你需要设置为网络挂接应该张贴到的URL。最终,它应该是这个样子:

http://internal.company.com/JiraUpdate/ProcessWebhook

我已经做了非常类似的措施,所以这里的几件事情要记住。

  • 确保您将webhook设置为最小范围。如果这是您希望在任何项目中创建问题时跨越所有项目触发的内容,那么您将有不少请求进入ProcessWebhook端点。尝试将项目限制为您需要的项目,并将事件限制为“创建问题”事件。

  • 如果您还没有公共端点进行测试,那么您一定要查看RequestBin。这将允许你做什么,为webhook设置一个临时URL,这样你就可以确切地看到JIRA的JSON有效载荷的样子。从那里开始,在ProcessWebhook方法中构建您的业务逻辑,并且您应该很好。要使用RequestBin,只需转到该网站,生成一个URL,并将其设置为Webhook URL。在您正在使用的项目下创建JIRA中的问题,并且您应该看到一个大的JSON负载转到该RequestBin URL--这会让您感觉到JSON的外观以及如何将其序列化为可用构造。

+0

好的 - 可以肯定的是,您指的是internal.company.com链接还是RequestBin链接?作为一个例子,前者就是我编造的东西。 – X3074861X

+0

好吧,很酷,只是想确定。如果您有任何其他问题,请告诉我。 – X3074861X

+0

我不确定如何处理ProcessWebhook中的JSON,我试图反序列化JSON,以及webhook URL应该在哪里触发,以便应用程序可以检索信息。我现在不会如何将这些东西连接在一起。 –

相关问题