【问题标题】:Call WebAPI method passing string id argument调用将字符串作为参数传递的 Web API 方法
【发布时间】:2013-03-13 19:22:13
【问题描述】:

我有一个 ASP.NET MVC4 WebAPI 实现,其中我有一个方法可以在注册时检查用户名是否可用。当用户离开用户名文本框时,将使用文本框中的值向服务器发送一个ajax调用调用。

我已经实现了如下。

1) 我将 WebAPI 路由代码设置为...

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

2) 我有要调用的 web api 动作写成...

    [HttpPost]
    public HttpResponseMessage IsUserNameAvailable(string id)
    {
        return Request.CreateResponse(HttpStatusCode.OK, (new UserManager()).IsUserNameAvailable(id));
    }

3) 我的 jquery 调用如下所示...

    $.ajax({
        url: '/api/PublicServicesApi/IsUserNameAvailable',
        data: '{id:"testname"}',
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        success: function (d) {
            if (d == true)
               //NAME IS AVAILABLE
            else
                //NAME IS NOT AVAILABLE
        }
    });

但是问题发生在服务器上

【问题讨论】:

  • 什么问题?你实际上还没有问过问题!

标签: json jquery asp.net-web-api


【解决方案1】:

您在 URL 中包含操作名称,我认为您的路由应该反映这一点。

routes.MapHttpRoute(
   name: "ActionApi",
   routeTemplate: "api/{controller}/{action}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

【讨论】:

    【解决方案2】:

    将您的路由更改为:

        config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}"
            );
    

    然后将您的操作方法更改为:

        [HttpPost]
        public HttpResponseMessage IsUserNameAvailable(dynamic value)
        {
            string id = value.id;
            return Request.CreateResponse(HttpStatusCode.OK, (new UserManager()).IsUserNameAvailable(id));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多