首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是个虫子吗?或者,如何调试2sxc ApiController?

这是个虫子吗?或者,如何调试2sxc ApiController?
EN

Stack Overflow用户
提问于 2020-09-25 01:29:42
回答 1查看 79关注 0票数 0

我有一个名为chv01的2sxc应用程序,用几个字段创建了一个内容类型命名的位置,创建了一个名为Portals/0/2sxc/chv01/api的文件夹,并添加了如下所示的LocationsController.cs

代码语言:javascript
复制
    using DotNetNuke.Web.Api;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Http;
    using System.Web.Http;
    public class locationsController : ToSic.Sxc.Dnn.ApiController
    {
      [HttpGet]
      [AllowAnonymous]
      public object Location()
      {
        return new ToSic.Sxc.Conversion.DataToDictionary(Edit.Enabled)
          .Convert(App.Data["Location"]);
      }
    }

我已经设置了内容类型的权限,以便.Anonymous可以读取。上面的一切都来自于阅读这个https://docs.2sxc.org/how-to/webapi/dotnet-webapi.html

使用DNN 9.07.02,2sxc 11.06.01,我的URL是api/2 2sxc/app/chv01 01/api/locations/Location,这会导致以下错误:

代码语言:javascript
复制
{
  "Message": "An error has occurred.",
  "ExceptionMessage": "Object reference not set to an instance of an object.",
  "ExceptionType": "System.NullReferenceException",
  "StackTrace": "   
at ToSic.Sxc.Dnn.Code.DnnDynamicCode.Init(IBlock block, ILog parentLog, Int32 compatibility) 
in C:\\Projects\\2sxc\\2sxc\\Src\\Dnn\\ToSic.Sxc.Dnn\\Dnn\\Code\\DnnDynamicCode.cs:line 22\r\n   
at ToSic.SexyContent.WebApi.DynamicApiController.Initialize(HttpControllerContext controllerContext) 
in C:\\Projects\\2sxc\\2sxc\\Src\\Dnn\\ToSic.Sxc.Dnn.WebApi\\WebApi\\DynamicApiController.cs:line 43\r\n   
at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n   
at System.Web.Http.Tracing.Tracers.HttpControllerTracer.<ExecuteAsyncCore>d__5.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 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   
at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__18`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 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}

如果我按预期将url更改为api/2sxc/app/chv01/api/NOTlocations/Location,则会得到以下内容:

代码语言:javascript
复制
<Error>
<Message>2sxc Api Controller Finder: Controller NOTlocationsController not found in app.</Message>
</Error>

所以我的问题是:

missed?

  • Maybe
  1. 如何调试?
  2. ,有人有工作示例吗?
  3. ,关于一个步骤或细节,我发现了一个错误?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 16:49:51

首先,您的问题几乎肯定是这样的:由于您使用的是[HttpGet],您可能认为可以在浏览器中调用url并查看会发生什么。

现在,在内部DNN做了一些神奇的工作,以便API知道您在哪个页面/模块上,这需要HTTP中的一些头。如果您使用javascript调用端点,则必须自己添加这些标头,或者使用$2sxc(...)助手来使其工作。您可以在此应用程序中找到示例:https://2sxc.org/en/apps/app/tutorial-javascript-rest-api-using-jquery-and-angularjs

这只是为了帮你解决问题。

要调试,您有两个选项

  1. 使用2 2sxc洞察力-并使用日志对象
  2. 将visual studio附加到DNN并调试活动

讲得通?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64056545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档