Dotnetnuke DNN SPA模块中的路由未按预期工作

Dotnetnuke DNN SPA模块中的路由未按预期工作,dotnetnuke,dotnetnuke-9,Dotnetnuke,Dotnetnuke 9,我似乎不知道如何访问我的一个控制器上的方法,设置控制器工作没有问题 ServiceRouteMapper: public void RegisterRoutes(IMapRoute mapRouteManager) { mapRouteManager.MapHttpRoute( moduleFolderName: "ImportantDatesModule", routeName: "default", url: "

我似乎不知道如何访问我的一个控制器上的方法,设置控制器工作没有问题

ServiceRouteMapper:

public void RegisterRoutes(IMapRoute mapRouteManager)
{
       mapRouteManager.MapHttpRoute(
           moduleFolderName: "ImportantDatesModule",
           routeName: "default",
           url: "{controller}/{action}/{id}",
           defaults: new { id = RouteParameter.Optional },
           namespaces: new[] { "company.ImportantDatesModule.Services" });
}
[SupportedModules("ImportantDatesModule")]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]
public class ItemController : DnnApiController
...

[HttpGet]
[ActionName("getItems")]
public HttpResponseMessage GetItems() 
{
    return Request.CreateResponse(HttpStatusCode.OK, "success");
}
dnnspamodule.itemsViewModel = function (moduleId, resx) {
var service = {
    path: "ImportantDatesModule",
    framework: $.ServicesFramework(moduleId),
    controller: "Item"
}
service.baseUrl = service.framework.getServiceRoot(service.path);
...

var getItems = function () {
    var restUrl = service.baseUrl + service.controller + "/getItems";
    console.log(restUrl);

    isLoading(true);
    var jqXHR = $.ajax({
        url: restUrl,
        beforeSend: service.framework.setModuleHeaders,
        dataType: "json"
    }).done(function (data) {
        if (data) {
            load(data);
            isLoading(false);
        }
        else {
            // No data to load 
            itemList.removeAll();
        }
    }).always(function (data) {

    });
};
控制器:

public void RegisterRoutes(IMapRoute mapRouteManager)
{
       mapRouteManager.MapHttpRoute(
           moduleFolderName: "ImportantDatesModule",
           routeName: "default",
           url: "{controller}/{action}/{id}",
           defaults: new { id = RouteParameter.Optional },
           namespaces: new[] { "company.ImportantDatesModule.Services" });
}
[SupportedModules("ImportantDatesModule")]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]
public class ItemController : DnnApiController
...

[HttpGet]
[ActionName("getItems")]
public HttpResponseMessage GetItems() 
{
    return Request.CreateResponse(HttpStatusCode.OK, "success");
}
dnnspamodule.itemsViewModel = function (moduleId, resx) {
var service = {
    path: "ImportantDatesModule",
    framework: $.ServicesFramework(moduleId),
    controller: "Item"
}
service.baseUrl = service.framework.getServiceRoot(service.path);
...

var getItems = function () {
    var restUrl = service.baseUrl + service.controller + "/getItems";
    console.log(restUrl);

    isLoading(true);
    var jqXHR = $.ajax({
        url: restUrl,
        beforeSend: service.framework.setModuleHeaders,
        dataType: "json"
    }).done(function (data) {
        if (data) {
            load(data);
            isLoading(false);
        }
        else {
            // No data to load 
            itemList.removeAll();
        }
    }).always(function (data) {

    });
};
执行调用的JS文件:

public void RegisterRoutes(IMapRoute mapRouteManager)
{
       mapRouteManager.MapHttpRoute(
           moduleFolderName: "ImportantDatesModule",
           routeName: "default",
           url: "{controller}/{action}/{id}",
           defaults: new { id = RouteParameter.Optional },
           namespaces: new[] { "company.ImportantDatesModule.Services" });
}
[SupportedModules("ImportantDatesModule")]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]
public class ItemController : DnnApiController
...

[HttpGet]
[ActionName("getItems")]
public HttpResponseMessage GetItems() 
{
    return Request.CreateResponse(HttpStatusCode.OK, "success");
}
dnnspamodule.itemsViewModel = function (moduleId, resx) {
var service = {
    path: "ImportantDatesModule",
    framework: $.ServicesFramework(moduleId),
    controller: "Item"
}
service.baseUrl = service.framework.getServiceRoot(service.path);
...

var getItems = function () {
    var restUrl = service.baseUrl + service.controller + "/getItems";
    console.log(restUrl);

    isLoading(true);
    var jqXHR = $.ajax({
        url: restUrl,
        beforeSend: service.framework.setModuleHeaders,
        dataType: "json"
    }).done(function (data) {
        if (data) {
            load(data);
            isLoading(false);
        }
        else {
            // No data to load 
            itemList.removeAll();
        }
    }).always(function (data) {

    });
};

我不知道您的设置控制器是什么样子的,但是可以尝试将您的路由分为操作样式({controller}/{action})和rest样式的路由({controller}/{id}+方法名称中的派生动词)。在您的服务路线映射器中尝试以下操作:

mapRouteManager.MapHttpRoute(
    moduleFolderName: "ImportantDatesModule",
    routeName: "default", 
    url: "{controller}/{action}",
    namespaces: new[] {"company.ImportantDatesModule.Services"});

mapRouteManager.MapHttpRoute(
    moduleFolderName: "ImportantDatesModule",
    routeName: "rest",
    url: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    namespaces: new[] { "company.ImportantDatesModule.Services" });

可以添加一个ajax.fail()方法来获取http错误代码吗。这是401404吗?这是一个500错误,但如果您查看响应,它是404。(响应状态代码不表示成功:404(未找到))很抱歉,我花了这么长时间才做出响应,在回到这里之前,我还必须完成一些其他任务。事实证明,我的问题是由一个剩余模块引起的,我本以为通过还原数据库删除了该模块。未删除/更改模块修改的文件。我已经解决了这个问题,现在我得到了一个401(未经授权)问题。根据问题中显示的我的配置,有什么想法吗?@JohnKane-注释掉ItemController类上的SupportedModules和DNNModuleAuthorization属性,并添加[AllowAnonymous]。然后检查您是否得到正确的响应。如果是这样,请注释掉allowanonymous并取消注释其他属性,一次一个。如果问题是SupportedModules属性,请尝试将清单文件中的的值更改为“ImportantDatesModule”。我想确保清单中的moduleName(在component type=Module下)与路由中的“moduleFolderName”相同。我注释掉了支持的模块和dnn模块授权,并添加到AllowAnonymous中,我仍然看到401错误。。。这看起来真的很奇怪。如果将allow anonymous放在类或方法级别,会有区别吗?类级别上的AllowAnonymous应该应用于该类上的所有方法,除非向该方法添加了另一个更严格的属性。我不知道你为什么还要拿到401。也许可以尝试在另一个环境中安装该模块。对不起,在我匆忙工作的过程中,我将AllowAnonymous放在了错误的控制器上。。。我得到了一个200,现在我把它添加到正确的控制器。我试着一次一个地取消受支持模块和dnn模块的注释,无论哪一个未注释,它都会再次给出404(这是一次一个地取消注释)