Мой метод GET РАБОТАЕТ нормально, когда я использую URL, зарегистрированный как SuperUser, как это (я получаю имя первого пользователя, извлеченного из БД):
http://localhost/DesktopModules/AAAA_MyChatServer/API/ChatApi/GetMessage
Но я не могу получить доступ к методу POST в том же контроллере, используя AJAX из представления или просто введя URL (метод post не получает попадание / найдено) :
http://localhost/DesktopModules/AAAA_MyChatServer/API/ChatApi/SendMessage
И это также не работает:
$('#sendChat').click(function (e) {
e.preventDefault();
var user = '@Model.CurrentUserInfo.DisplayName';
var message = $('#chatBoxReplyArea').val();
var url = '/DesktopModules/AAAA_MyChatServer/API/ChatApi/SendMessage';
$.post(url, { user: user, message: message }, function (data) {
}).done(function () {
});
});
Сообщение об ошибке:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost/DesktopModules/AAAA_MyChatServer/API/ChatApi/SendMessage'.
</Message>
<MessageDetail>
No action was found on the controller 'ChatApi' that matches the name 'SendMessage'.
</MessageDetail>
</Error>
И иногда:
"Контроллер не поддерживает метод GET"
, хотя у меня есть и GET, и POST и ПОЛУЧИТЬ работает. Чего мне не хватает?
Я создал класс маршрутизации в своем проекте DNN:
using DotNetNuke.Web.Api;
namespace AAAA.MyChatServer
{
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute("MyChatServer", "default", "{controller}/{action}", new[] { "AAAA.MyChatServer.Services" });
}
}
}
Я добавил контроллер Api DNN в папку Services моего проекта с именем AAAA.MyChatServer:
using DotNetNuke.Web.Api;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
namespace AAAA.MyChatServer.Services
{
[DnnAuthorize(StaticRoles = "SuperUser")]
public class ChatApiController : DnnApiController
{
[HttpGet]
public HttpResponseMessage GetMessage()
{
ChatServerManager csm = new ChatServerManager();
var users = csm.GetAllUsers();
var user = users.FirstOrDefault().Name;
return Request.CreateResponse(System.Net.HttpStatusCode.OK, user);
}
[System.Web.Http.HttpPost]
public HttpResponseMessage SendMessage(string toUser, string message)
{
return Request.CreateResponse(System.Net.HttpStatusCode.OK);
}
}
}