使用ASP.NET Web API时,NopCommerce代码会创建多个空引用异常

时间:2016-09-22 05:41:13

标签: c# asp.net-web-api autofac nopcommerce

我目前在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

这似乎是一种无望的状态。

我几个月来一直在研究这个问题!

1 个答案:

答案 0 :(得分:1)

检查您的代码是可取的,但最有可能的是,您在注册Web API时已经绕过nopcommerce,现在您在通常的流程中注册之前尝试使用依赖项。这就是为什么当你在循环中等待时它们最终出现的原因(我无法想象你是如何找到这样的解决方法的......)。

作为解决方案,您应该使用插件集成Web API,而不是修改原始源代码。我过去做过,并不难。如果我不记得的话,曾经有过几个样本。