如何在ASP.NETMVC应用程序中使用Webhook从JIRA检索信息?
我正在使用一个MVC应用程序,它将向JIRA发送一封电子邮件,其中包含在JIRA中创建问题所需的信息 这是所有成功的工作,但下一步是检索页面中的信息。目前,我正在显示通过从数据库检索发送的信息 问题是我还需要检索问题的键和状态。这不能只是输入,因为用户不知道它们是什么,必须在JIRA中完成 最初,我打算使用API从JIRA获取信息,但由于JIRA站点未在线托管,API不符合访问控制允许标题“标题 有人告诉我,我必须使用webhooks来获取信息,但我不确定该怎么做 我知道我必须首先通过JIRA管理UI注册我正在做的webhook。我要知道的是如何使用webhook在我的应用程序中检索该信息,我知道webhook必须为创建的webhook有一个友好的名称,URL,其中callba应发送ck webhook的范围,以及发布到URL的事件,可以是“所有事件”或一组特定事件 我还知道,如果添加到创建问题工作流转换中,Post函数web钩子将不会启动。建议您将web钩子配置为从创建的问题事件启动 因此,我如何才能成功检索此信息,我目前正在尝试:如何在ASP.NETMVC应用程序中使用Webhook从JIRA检索信息?,asp.net,asp.net-mvc,vb.net,jira,webhooks,Asp.net,Asp.net Mvc,Vb.net,Jira,Webhooks,我正在使用一个MVC应用程序,它将向JIRA发送一封电子邮件,其中包含在JIRA中创建问题所需的信息 这是所有成功的工作,但下一步是检索页面中的信息。目前,我正在显示通过从数据库检索发送的信息 问题是我还需要检索问题的键和状态。这不能只是输入,因为用户不知道它们是什么,必须在JIRA中完成 最初,我打算使用API从JIRA获取信息,但由于JIRA站点未在线托管,API不符合访问控制允许标题“标题 有人告诉我,我必须使用webhooks来获取信息,但我不确定该怎么做 我知道我必须首先通过JIRA管
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
我不确定在switch语句中放置什么,也不确定如何返回json并显示它,我如何才能做到这一点?如果我正确理解您的意思,那么这应该如何工作的高级过程是:
- 向Jira发送了一封电子邮件
- 在给定项目下创建了一个问题,这将触发webhook
- webhook将向您指定的URL发布JSON负载
- URL应该是使用和处理请求的MVC应用程序中的公共路由
公共类JiraUpdateController:控制器
{
///
///为更新任务设置默认的基本记录器
///
私有静态只读记录器Logger=LogManager.GetCurrentClassLogger();
公共静态记录器日志
{
获取{return logger;}
}
[HttpPost]
public ActionResult ProcessWebhook()
{
//在这里相应地处理JSON负载。
}
}
现在,您需要将此设置为webhook应该发布到的URL。最终,它应该如下所示:
我做过类似的事情,所以这里有几件事要记住
- 请确保将webhook设置为最小范围。如果这是您希望在任何项目中创建问题时在所有项目中触发的事件,则会有相当多的请求发送到ProcessWebhook端点。请尝试将项目限制为您需要的项目,并将事件仅限于“已创建的问题”“事件
- 如果您还没有用于测试的公共端点,那么您肯定应该签出。这将允许您做的是为webhook设置一个临时URL,这样您就可以确切地看到来自JIRA的JSON负载是什么样子的。从这里开始,在ProcessWebhook方法中构建您的业务逻辑,您就可以开始了。要使用RequestBin,只需转到站点,生成一个URL,并将其设置为Webhook URL。在您正在处理的项目下,在JIRA中创建一个问题,您应该会看到一个大的JSON负载进入该RequestBin URL——这将让您了解JSON的确切外观以及如何将其序列化为一个可行的构造
JsonConvert.DeserializeObject(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()
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.
}
}