我目前在NopCommerce网站上使用ASP.NET Web API时遇到了一个问题,我需要将其连接到我的跨平台应用程序。
我调用API时代码中断了。它在以下位置产生例外:
var scope = EngineContext.Current.ContainerManager.Scope()
在task.cs
页面。
我已尝试调试代码,但不会定期生成异常;有时它会来,有时候不会。但是,我确实找到了一些突破点:
var sis = EngineContext.Current.Resolve<StoreInformationSettings>()
。
我已经尝试加载它直到它加载。即,将其放在while
语句中:
var sis = EngineContext.Current.Resolve<StoreInformationSettings>()`
while(sis == null)
{
sis = EngineContext.Current.Resolve<StoreInformationSettings>()
}
同样,还有一些实例。这意味着它会加载,但是在延迟之后,也许。
nopcommerece论坛中有一条指令更新autofac
包,我做了。
所有Autofac Nugets都在Nop.Web中单独尝试。
参考此链接here,我尝试过修复,但这并没有解决我的问题。
I came to the conclusion that it has some issue with the Autofac DI settings (not sure)
。或者NopCommerce是否构建为不支持API?
正如Rigueira先生建议的那样,我试图在我的插件本身内的路由配置类中注册路由。
API的路由配置如下:
public void RegisterRoutes(RouteCollection routes)
{
GlobalConfiguration.Configure(config =>
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "TestApi", id = RouteParameter.Optional }
);
});
}
但是,它似乎没有任何区别。
我尝试以正常模式注册插件中的路径:
public void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"WebApi",
"api/{controller}/{action}/{id}",
new { controller = "WebApi", action = "", id = RouteParameter.Optional },
new[] { "Nop.Plugin.WebApi.EduAwake.Controllers" }
);
}
仍然没有去。 这是我得到的错误:
Multiple types were found that match the controller named 'Topic'. This can happen if the route that services this request ('api/{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.
Line 13: <div class="col-md-12 padding-0" id="home-topic" style="margin-left:-14px;">
Line 14: <div id="home-topic-content" style="width:104%;">
Line 15: @Html.Action("TopicBlock", "Topic", new { systemName = "HomePageText" })
Line 16: </div>
Line 17: </div>
在 index.cshtml 。
这似乎是一种无望的状态。
我几个月来一直在研究这个问题!
答案 0 :(得分:1)
检查您的代码是可取的,但最有可能的是,您在注册Web API时已经绕过nopcommerce,现在您在通常的流程中注册之前尝试使用依赖项。这就是为什么当你在循环中等待时它们最终出现的原因(我无法想象你是如何找到这样的解决方法的......)。
作为解决方案,您应该使用插件集成Web API,而不是修改原始源代码。我过去做过,并不难。如果我不记得的话,曾经有过几个样本。