Asp.net mvc DNN无法访问DNN Api控制器中的POST方法
当我使用以超级用户身份登录的url时,我的GET方法可以正常工作,如下所示:我从数据库中获取第一个用户的名称: 但是,我无法在同一控制器中使用AJAX从视图访问POST方法,也无法仅通过输入url访问POST方法。POST方法未被命中/找到: 而且这也失败了:Asp.net mvc DNN无法访问DNN Api控制器中的POST方法,asp.net-mvc,asp.net-web-api,asp.net-mvc-routing,dotnetnuke,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc Routing,Dotnetnuke,当我使用以超级用户身份登录的url时,我的GET方法可以正常工作,如下所示:我从数据库中获取第一个用户的名称: 但是,我无法在同一控制器中使用AJAX从视图访问POST方法,也无法仅通过输入url访问POST方法。POST方法未被命中/找到: 而且这也失败了: $('#sendChat').click(function (e) { e.preventDefault(); var user = '@Model.Cur
$('#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>
我在项目的文件夹服务中添加了一个名为AAAA.MyChatServer的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);
}
}
}
SendMessage的Web Api包含2个参数,因此应在查询字符串中发布: 如果要使用对象的数据发布它,则需要将Web服务参数设置为对象模型
另外,您的javascript参数与Web服务不同,因为它使用toUser您的SendMessage Web Api包含2个参数,因此它应该在查询字符串中发布: 如果要使用对象的数据发布它,则需要将Web服务参数设置为对象模型
另外,您的javascript参数与Web服务不同,因为它使用toUser。在DNN WebAPI中,有两种方法可以调用POST方法:使用参数和使用对象。如果使用SendMessage方法中的参数,则需要通过查询字符串传递这些参数值 另一方面,创建一个对象并通过对WebAPI方法的调用发送该对象可以处理更多的场景,并且可以说是处理任何POST方法的更好方法,因为它会将这些值隐藏起来,使调用更难伪造。要处理此问题,您可以从SendMessage方法中删除参数,而是在方法中查询HttpContext.Current.Request对象。您创建的对象{user:user,message:message}将嵌套在其中的某个位置 正如您在示例中所写的,您的对象就像夜间的两艘船只一样,驶过您的参数 我自己才刚刚弄明白这一点,我还没有完全理解我需要的,但希望这能帮助你。以下是我在寻求使用cURL将文件上载到DNN WebAPI时引用的一些文章:
祝你好运 在DNN WebAPI中调用POST方法有两种方法:使用参数和使用对象。如果使用SendMessage方法中的参数,则需要通过查询字符串传递这些参数值 另一方面,创建一个对象并通过对WebAPI方法的调用发送该对象可以处理更多的场景,并且可以说是处理任何POST方法的更好方法,因为它会将这些值隐藏起来,使调用更难伪造。要处理此问题,您可以从SendMessage方法中删除参数,而是在方法中查询HttpContext.Current.Request对象。您创建的对象{user:user,message:message}将嵌套在其中的某个位置 正如您在示例中所写的,您的对象就像夜间的两艘船只一样,驶过您的参数 我自己才刚刚弄明白这一点,我还没有完全理解我需要的,但希望这能帮助你。以下是我在寻求使用cURL将文件上载到DNN WebAPI时引用的一些文章: 祝你好运
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);
}
}
}