【发布时间】:2020-01-24 05:03:59
【问题描述】:
当我使用像这样以超级用户身份登录的 url 时,我的 GET 方法 WORKS 很好(我得到了从数据库中提取的第一个用户的名称):
http://localhost/DesktopModules/AAAA_MyChatServer/API/ChatApi/GetMessage
但我无法使用 AJAX 从视图或仅通过输入 url 访问同一控制器中的 POST 方法(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 并且 GET 工作。我错过了什么?
我在我的 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" });
}
}
}
我在名为 AAAA.MyChatServer 的项目的文件夹 Services 中添加了一个 DNN Api 控制器:
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);
}
}
}
【问题讨论】:
标签: asp.net-mvc asp.net-web-api asp.net-mvc-routing dotnetnuke