Во-первых, я думаю, что у вас может быть непонимание маршрутизации. Похоже, вы используете имя пространства имен в своем URL-адресе. Если ваш модуль не называется «NewController», ваш URL-адрес не будет работать. Маршрутизация DNN очень похожа на маршрутизацию Web Api, за исключением того, что вы должны указать имя папки модуля как таковое /DesktopModules/<moduleFolderName>/API/
. Так что если у вас есть модуль под названием 'MyModule'
и контроллер находится в пространстве имен 'NewController'
, адрес будет
«http://localhost/dnn7/DesktopModules/MyModule/API/NewInfo/HelloWorld»
маршрут по умолчанию будет выглядеть следующим образом;
mapRouteManager.MapHttpRoute(
"MyModule",
"default",
"{controller}/{action}",
new[] { "NewController" });
, который также может быть переписан с именованными параметрами как таковой
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "default",
url: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
namespaces: new[] { "NewController" }
);
См this link for more info
Что касается вашей второй части, вы можете иметь несколько маршрутов? Конечно;
Скажите ваш контроллер имеет следующие действия
namespace NewController
{
public class NewInfoController : DnnApiController
{
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage HelloWorld()
{
return Request.CreateResponse(HttpStatusCode.OK, "Hello World!");
}
[HttpGet]
public HttpResponseMessage GetItemByName(string name)
{
//your logic here
}
[HttpGet]
public HttpResponseMessage GetItemByNameAndLocation(string name, string location)
{
//your logic here
}
}
}
тогда ваш класс маршрутизации будет выглядеть следующим образом
namespace NewController
{
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "itemByName",
url: "{controller}/{action}/{name}",
defaults: new { name = "" },
namespaces: new[] { "NewController" }
);
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "itemByNameAndLocation",
url: "{controller}/{action}/{name}/{location}",
defaults: new { name = "", location = "" },
namespaces: new[] { "NewController" }
);
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "default",
url: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
namespaces: new[] { "NewController" }
);
}
}
}
Теперь http://localhost/dnn7/DesktopModules/MyModule/API/NewInfo/GetItemByName/someName
будет обрабатываться первым маршрутом, http://localhost/dnn7/DesktopModules/MyModule/API/NewInfo/GetItemByNameAndLocation/someName/someLocation
будет обрабатываться второй маршрут. Все, что не соответствует этим двум, будет обрабатываться последним маршрутом default
. Помните, что иерархия в маршрутизации важна!
Что делать, если вы хотите, чтобы сократить URL, чтобы сказать
http://localhost/dnn7/DesktopModules/MyModule/API/fetch/someName
и
http://localhost/dnn7/DesktopModules/MyModule/API/fetchByNameAndLocation/someName/someLocation
Заметьте, что мы не указать Controller
nd Action
. Все, что нам нужно сделать, это изменить первые два маршрута
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "itemByName",
url: "fetch/{name}",
defaults: new { controller = "NewInfo", action = "GetItemByName", name = "" },
namespaces: new[] { "NewController" }
);
mapRouteManager.MapHttpRoute(
moduleFolderName: "MyModule",
routeName: "itemByNameAndLocation",
url: "fetchByNameAndLocation/{name}/{location}",
defaults: new { controller = "NewInfo", action = "GetItemByNameAndLocation", name = "", location = "" },
namespaces: new[] { "NewController" }
);
Если вы знакомы с веб-Апи, вы заметите маршрутизации услуги Dnn очень похожа, так как это всего лишь обертка вокруг основного веб-маршрутизации API. Удачи!
Я пытаюсь понять вашу проблему. Получаете ли вы ошибку 404 при попытке проверить свою службу с помощью браузера с помощью http: // localhost/dnn7/DesktopModules/NewController/API/NewInfo/HelloWorld? Если да, то DLL библиотеки классов библиотеки встроена в папку DNN/bin? – DotNetNuclear