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

Routing in DNN SPA Module is not working as expected

我似乎无法弄清楚如何访问我的一个控制器上的方法,设置控制器可以正常工作...

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");
}

调用的JS文件:

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}) 与休息风格路由 ({controller}/{id} + derived方法名称中的动词)。在您的服务路线映射器中试试这个:

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" });