【问题标题】:How to retrieve get parameters如何检索获取参数
【发布时间】:2020-10-30 16:16:53
【问题描述】:

获取 HttpGet 参数

我有这样的方法

        [HttpGet("SendEmails/sendStudentMailIR/{studentID}/{email}/{surID}")]
        public async Task<bool> sendStudentMailIR(string studentID, string email, string surID)
        {
            bool isSent = false;
            ...
            return isSent;
        }

SendEmails 是我的控制器,sendStudentMailIR 是方法 我正在使用ajax来调用它 使用这个调用。

        var surID = this.surId();
        var studentID = this.studentID();
        var email = this.collegeStudentEmail();
        $.ajax({
            url: "/SendEmails/sendStudentMailIR/" + studentID + "/" + email + "/" + surID,
            data: JSON.stringify(ko.toJSON(this)),
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            success: function (data) {
                alert("Send");
            }
        });

但我从来没有达到这个方法。我错过了什么。我正在使用 Core 3.1。

【问题讨论】:

  • 您的控制器方法标记为“获取”,而您的 ajax 正在尝试“发布”将您的 ajax 更改为 type:'Get',而且,我认为您不需要在 url 中传递参数时传递 data
  • [HttpGet()]属性中添加[FromQuery],我相信这应该表示要在查询字符串中获取的参数。
  • @janzen 他们不能来自其他任何地方的 GET 请求 [HttpGet] 因为它没有正文(如果 OP 更改为 [Route] 可能需要如此值得一提)
  • 很高兴知道。谢谢你。 @freedomn-m
  • 您应该得到一个错误(404 或 405) - 始终在您的 ajax 请求中添加 error: 回调以查看发生了什么(或查看网络选项卡)

标签: c# jquery asp.net-core


【解决方案1】:

假设你想保持你的控制器方法不变,一个HttpGet请求,你需要改变你的ajax,请改成如下:

$.ajax({
            url: "/SendEmails/sendStudentMailIR/" + studentID + "/" + email + "/" + surID,
            //data: JSON.stringify(ko.toJSON(this)), no need to set data as they are passed in the url
            type: 'GET', //You have a controller method of Get not Post
            dataType: 'json',
            contentType: 'application/json',
            cache: false, //don't cache this request
            success: function (data) {
                alert("Send");
            },
            error: function(jqXHR, exception){ //Added error for exception handling

            }
        });

【讨论】:

    【解决方案2】:

    应该是[HttpPost("SendEmails/sendStudentMailIR/{studentID}/{email}/{surID}")],因为您在 ajax 请求中使用 type: 'POST'

    【讨论】:

    • 如果 OP 希望控制器方法为 HttpGet??
    • @RyanWilson 那么他们不应该使用方法 POST - 它改变了一个或另一个,你的评论(我 +1'd)建议改变方法,这表明改变属性。此外,该方法是“发送电子邮件”,因此无论如何都不应该是 GET(IMO),因为它不是“获取”数据,而是在进行更改。
    • 谢谢,完全没看到这个,在看控制器从不看我的ajax查询。所以我只是将我的 ajax 查询更改为 get。
    • @freedomn-m 他正在得到一些东西,关于是否发送电子邮件的状态。
    • @RyanWilson 我认为“...”是实际发送电子邮件的代码。 POST/PUT 仍然允许响应。
    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多