LUIS响应抛出错误请求

本文关键字:错误 请求 出错 响应 LUIS | 更新日期: 2023-09-27 18:08:07

我已经开始将Luis整合到我的BOT中。LUIS查询在浏览器中工作得很好,但是当通过代码调用时,来自LUIS GetResult的响应会抛出一个错误。

LUIS查询在这里

对话框源代码:

 [LuisModel("2d3e39d8-632a-4e00-bf2f-d98ea4b2ed79&", "subscription Key")]
    [Serializable]
    public class SupportDialog : LuisDialog<object>
    {
        [LuisIntent("")]
        public async Task None(IDialogContext context, LuisResult result)
        {
            await context.PostAsync("Sorry, I dont understand what you need");
            context.Wait(MessageReceived);
        }

        [LuisIntent("OrderStatus")]
        public async Task OrderStatus(IDialogContext context, LuisResult result)
        {
            var returnMsg = "You wanted to check the order status";
            var orderStatus = "Dispatched";
            var deliveryDate = DateTime.Now.AddDays(3);
            var entities = new List<EntityRecommendation>(result.Entities);
            if(entities.Any((entity)=> entity.Type == "Order"))
            {
                var orderEntity = entities.Where((entity) => entity.Type == "Order").FirstOrDefault();
                var resolutionStr = orderEntity.Resolution.FirstOrDefault().Value ?? null;
                if(!string.IsNullOrEmpty(resolutionStr))
                {
                    returnMsg = "Your order " + resolutionStr + " status is " + orderStatus + " and expected to deliver by " + deliveryDate.Humanize();
                }
            }
            await context.PostAsync(returnMsg);
            context.Wait(MessageReceived);
        }
    }

MessageController源代码:

 internal static IDialog<object> MakeRoot()
        {
            return Chain.From(() => new SupportDialog());
        }
        [ResponseType(typeof(void))]
        public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity != null)
            {
                // one of these will have an interface and process it
                switch (activity.GetActivityType())
                {
                    case ActivityTypes.Message:
                        await Conversation.SendAsync(activity, MakeRoot);
                        break;
                    case ActivityTypes.ConversationUpdate:
                    case ActivityTypes.ContactRelationUpdate:
                    case ActivityTypes.Typing:
                    case ActivityTypes.DeleteUserData:
                    default:
                        Trace.TraceError($"Unknown activity type ignored: {activity.GetActivityType()}");
                        break;
                }
            }
            return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
        }

在尝试调试时,我在BOT模拟器中得到以下错误(仅部分提取):

> Exception: System.Net.Http.HttpRequestException: Response status code
> does not indicate success: 400 (Bad Request).'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Luis.LuisService.<Microsoft-Bot-Builder-Luis-ILuisService-QueryAsync>d__4.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Luis.Extensions.<QueryAsync>d__3.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.LuisDialog`1.<MessageReceived>d__7.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()'r'n  
> at
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.Microsoft.Bot.Builder.Internals.Fibers.IAwaiter<T>.GetResult()'r'n
> at
> Microsoft.Bot.Builder.Dialogs.Chain.FromDialog`1.<ResumeAsync>d__3.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()'r'n  
> at
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.Microsoft.Bot.Builder.Internals.Fibers.IAwaiter<T>.GetResult()'r'n
> at
> Microsoft.Bot.Builder.Dialogs.Chain.LoopDialog`1.<ResumeAsync>d__3.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IDialogStack-PollAsync>d__19.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__21`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.ReactiveDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__5`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.ExceptionTranslationDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.LocalizedDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.ScoringDialogTask`1.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()'r'n  
> at
> Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.SerializingDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__4`1.MoveNext()'r'n---
> End of stack trace from previous location where exception was thrown
> ---'r'n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)'r'n   at
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()'r'n   at
> Microsoft.Bot.Builder.Dialogs.Internals.PostUnhandledExceptionToUserTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__5`1.MoveNext()

LUIS响应抛出错误请求

删除LuisModel中的&符号。

我猜你不小心从URL复制了它。

同时,更改你在代码中发布的订阅键,否则我们会窃取它

下面的错误也可能出现;当你在Staging槽

下发布LUIS应用程序时
Response status code does not indicate success: 400 (Bad Request)
所以总是在生产槽 下发布你的LUIS应用程序

显然,你必须从你的LuisModel ID中删除& (&)符号。

有一行代码可以抛出空引用异常:

var resolutionStr = orderEntity.Resolution.FirstOrDefault().Value ?? null;

试着用另一种方式重写:

var resolutionStr = orderEntity.Resolution.FirstOrDefault()?.Value;