Asp.net mvc DNN无法访问DNN Api控制器中的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

当我使用以超级用户身份登录的url时,我的GET方法可以正常工作,如下所示:我从数据库中获取第一个用户的名称:

但是,我无法在同一控制器中使用AJAX从视图访问POST方法,也无法仅通过输入url访问POST方法。POST方法未被命中/找到:

而且这也失败了:

$('#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);
        }
    }
}