Api 在 Dnn v8 站点中找不到

Api Not Found in Dnn v8 Site

我们有一个 Dnn 站点,我们正在停用和替换。我们决定导出我们需要的客户数据的一种简单方法是重新使用我们已经为另一个项目构建的 2sxc Api 工具。所以我们安装了最新版本的 2sxc (11.12.1),一切似乎都正常。添加了一个应用程序,准备好所有文件并开始测试。

无论我们做什么,我们都会在 api 上得到 404 错误。

是否有额外的配置或我们需要做的事情来让 Dnn v8 允许 URL 被路由?

我们尝试了长版本和短版本,但都没有成功。我们将设置移至 Dnn v9.08.01,它按预期工作。

/api/2sxc/app/appname/api/public/hello

/DesktopModules/2sxc/api/app/appname/api/public/hello

我们甚至从我们的代码切换到 the 2sxc basic WebApi Examples 中的演示,none 可能的路径变化(在 Dnn 9 中工作)在 Dnn 8 中工作。

知道我们缺少什么吗?

>>> 续2021年5月4日(与你同在)

已将 2sxc 升级到 11.22.0 LTS

继续尝试各种事情。将文件(和 Class)从 api/PublicController.cs 重命名为 api/AppExtController.cs。使用新的 2sxc Api 工具进行测试。仍然没有运气。

终于上了服务器,在本地的浏览器里又试了一遍,终于吐出一个详细的——令我惊讶的——错误:

<ExceptionMessage>An error occurred when trying to create a controller of type 'AppExtController'. Make sure that the controller has a parameterless public constructor.</ExceptionMessage>

<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>Unable to resolve AppExtController IsResolutionCall from Container with ambient ScopeContext DnnSharp.DryIoc.AsyncExecutionFlowScopeContext with Scope {Name=~WebRequestScopeName} with Rules with {SelectLastRegisteredFactory} with FactorySelector=SelectLastRegisteredFactory with Made={FactoryMethod=ConstructorWithResolvableArguments, PropertiesAndFields=<custom>, ParameterSelector=<custom>} Where no service registrations found and no dynamic registrations found in 0 of Rules.DynamicServiceProviders and nothing found in 1 of Rules.UnknownServiceResolvers</ExceptionMessage>

<ExceptionType>DnnSharp.DryIoc.ContainerException</ExceptionType>

<StackTrace> at DnnSharp.DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) at DnnSharp.DryIoc.Container.TryThrowUnableToResolve(Request request) at DnnSharp.DryIoc.Container.DnnSharp.DryIoc.IContainer.ResolveFactory(Request request) at DnnSharp.DryIoc.Container.ResolveAndCacheFactoryDelegate(Type serviceType, IfUnresolved ifUnresolved) at DnnSharp.Common2.IoC.WebApi.DnnSharpDependencyScope.GetService(Type serviceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)</StackTrace>
</InnerException>

上面要注意的关键是 DnnSharp.DryIoc 引发的异常。

我意识到这可能意味着它不是 2sxc 问题。但我确实安装了 DnnSharp 的 ActionForm。我不知道有任何 API 选项或设置。

有什么方法可以解决为什么要使用路由或处理?我应该去哪里解决这个问题?

此外,您在下面提到“DNN 中的配置错误(缺少主域...”- 您能否提供更多关于我需要检查的相关内容的详细信息?我确实检查过 DefaultPortalAlias 与站点的设置相匹配。它是唯一的门户 (0),并且没有语言。

站点设置、站点行为、站点别名与主要域相同且站点别名映射模式为重定向。

Servers/System Info/Web,站点 Url 也显示相同的域。

其中有任何相关的或正在发挥作用的吗?他们似乎都一致。

我们最终从站点中删除了 ActionForm,API 开始按预期工作。所以它与依赖注入冲突有关。我本可以付费升级到 ActionForm 以获得更新的版本来修复它(我们使用的是 v5.1.54),但是只有 1 个联系表,所以我们用其他东西替换了它,删除了 AF,问题就消失了.