2017-08-11 16 views
2

我是Azure函数的新手。 我想写一个Http触发器,它不仅会“失败”坏JSON(与我的架构不匹配,我想通过与他们提交的JSON有关的无效消息向调用者提供反馈)如何将HttpTrigger连接到设计器

好了,第一我长大VS2017。

enter image description here

然后我编码它。我可以用邮递员来测试它,它邮递员在测试过程中正常工作。

using System; 
using System.Linq; 
using System.Collections.Generic; 
using System.IO; 
using System.Net; 
using System.Net.Http; 
using System.Threading.Tasks; 

////using MyExceptionLibrary; 

using Microsoft.Azure.WebJobs; 
using Microsoft.Azure.WebJobs.Extensions.Http; 
using Microsoft.Azure.WebJobs.Host; 

using Newtonsoft.Json.Linq; 
using Newtonsoft.Json.Schema; 

namespace MyNamespace.AzureFunctionsOne 
{ 
    public static class MyFirstHttpTrigger 
    { 
     [FunctionName("MyFirstHttpTriggerFunctionName")] 
     public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log) 
     { 
      log.Info("C# HTTP trigger function MyFirstHttpTriggerFunctionName about to process a request."); 

      try 
      { 

       string jsonSchemaText = @"{ 
        'description': 'A person', 
        'type': 'object', 
        'properties': 
        { 
        'name': {'type':'string'}, 
        'hobbies': { 
         'type': 'array', 
         'items': {'type':'string'} 
        } 
        } 
       }"; 

       JSchema schema = JSchema.Parse(jsonSchemaText); 

       var content = req.Content; 
       string jsonContent = content.ReadAsStringAsync().Result; 

       JObject jobj = JObject.Parse(jsonContent); 

       IList<string> messages; 
       bool valid = jobj.IsValid(schema, out messages); 
       if (!valid) 
       { 
        string errorMsg = string.Join(",", messages); 
        throw new ArgumentOutOfRangeException(string.Format("Bad Json. ({0})", errorMsg)); 
       } 
      } 
      catch (Exception ex) 
      { 
       string errorMsg = ex.Message; //// ExceptionHelper.GenerateFullFlatMessage(ex); 
       log.Error(errorMsg); 
       return req.CreateResponse(HttpStatusCode.BadRequest, errorMsg); 
      } 

      log.Info("C# HTTP trigger function MyFirstHttpTriggerFunctionName processed a request."); 
      return req.CreateResponse(HttpStatusCode.OK); 
     } 
    } 
} 

然后我“发布“这种天蓝色的功能n到云端。

我的问题是现在........我该如何连接到逻辑应用程序设计器是触发器?

在下面,我可以添加通用请求触发器。

enter image description here

在下文中,我也找过我〜〜蔚蓝的HTTP触发器,我公布,没有运气。

enter image description here

所以我无法弄清楚如何让我的自定义HTTP触发器可用的逻辑应用程序设计,因此它可以是入口点触发。

我是否缺少一些基本概念?

我的最后一步就是:

我想要一个第三方来发布一些JSON到我的Azure的逻辑应用作为HTTP请求。这应该是触发器。但是我只想让触发器在提交有效的json时继续运行。 (我知道这可以通过通用请求触发器来完成)。我的警告(也就是我自定义的http触发器)是我希望第三方获取模式违规消息,以便他们知道他们做错了什么。

+0

对于未来的读者。我的问题有点“关闭”,因为我最初并不了解Azure函数存在于Logic-Apps之外的世界中。我能够得到我想要的,但不是通过创建自定义的逻辑应用程序“触发器”。我在这里记录它。 https://granadacoder.wordpress.com/2017/08/21/actionconditionfailed-the-execution-of-template-action-condition-is-skipped-expected-status-values-succeeded-and-actual-value-failed- azure-logic-apps/ – granadaCoder

回答

1

如果我正确地理解了这一点,您就有第三方通过HTTP请求调用的工作流程,并且当请求主体格式不正确时,您希望返回友好的错误。

因此,您编写了一个将自身作为请求端点公开的Azure函数,并进行验证。

如果是这种情况,您只需要让Azure功能在成功验证后调用Logic App,并将原始有效内容传递给Logic App。因此,您可以使用请求触发器创建逻辑应用程序,保存并获取Url,并调用Url函数。

+0

你说的话是有道理的,我理解它.........但它就好像我只是在部署一个端点。没有任何意义的是(我的第一个屏幕截图)说“Http触发器”...在...我认为这意味着我正在编写一个(自定义)Http *触发器*。我可以在逻辑应用程序中使用的自定义触发器。 – granadaCoder

+0

您可以创建拉动或webhook触发器,但“请求”触发器是一种特殊的触发器。我认为你真正想要的是一个可以放在“请求”后面的动作,称为“验证json”,当输入与模式定义不匹配时抛出错误,请投票选择已经在uservoice上提交的功能:https:// feedback .azure.com/forums/287593-logic-apps/suggestions/16501900-validate-input-received-in-http-trigger –

+0

我投了票。是啊......我会尝试在通用请求触发器后面执行我的操作。但我认为这不会拒绝最初的要求......这正是我所要做的。我仍然不知道为什么它叫做“HttpTrigger”......似乎很混乱。什么是HttpTrigger,如果它不是请求触发器? – granadaCoder

相关问题