gpt4 book ai didi

asp.net-mvc - 如何创建自己的 web api 操作并使用 jquery 调用它?

转载 作者:行者123 更新时间:2023-12-04 05:16:46 24 4
gpt4 key购买 nike

我正在学习 ASP.NET MVC4 Web API。
我想创建一个接收两个参数的新方法

[HttpPost] 
public string MarkAsSeen(int objectID, long userID)

我想使用 jquery 来使用它:
$.ajax({
type: "POST",
url: "/api/tutorial/MarkAsSeen",
data: JSON.stringify({ objectID: _obj, profileID: _pid }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert(_tutorial + ' seen');
},async: true
});

我的路线是这样配置的
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}"
);

但这不起作用:

No HTTP resource was found that matches the request URI 'http://local.dev.unation.com/api/tutorial/MarkAsSeen'.","MessageDetail":"No action was found on the controller 'Tutorial' that matches the request.



如果我将路由的模板更改为 api/{controller}/{action}/{objectID}/{profileID} 以及在 url 上添加此信息的 jquery 方法:/api/tutorial/MarkAsSeen/+ _obj +/+ _pid
它有效。

我不想执行这些更改,因为:
  • 我想要所有操作的通用路线(因此它们的参数名称/数量应该无关紧要)
  • 这个 url 附加很难看,我想使用数据属性

  • 你能告诉我我做错了什么吗?

    不错!

    最佳答案

    Web.Api 并不真正喜欢多个参数。最简单的解决方案是创建一个新类型来保存您的数据:

    public class MarkAsSeenRequest
    {
    public int objectID { get; set; }

    public int profileID { get; set; }
    }

    并在您的 Controller 操作中使用它:
    [HttpPost] 
    public string MarkAsSeen(MarkAsSeenRequest request)
    {
    //...
    }

    它应该适用于您的原始路线:
    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}"
    );

    进一步阅读:
  • How WebAPI does Parameter Binding
  • WebAPI Parameter binding under the hood
  • Sending HTML Form Data
  • 关于asp.net-mvc - 如何创建自己的 web api 操作并使用 jquery 调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159056/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com