调用WebAPI方法传递字符串id参数

时间:2013-03-13 09:49:29

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

我有一个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
        }
    });

但是问题发生在服务器上

2 个答案:

答案 0 :(得分:1)

您在网址中加入了操作名称,我认为您的路由应反映这一点。

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

答案 1 :(得分:0)

将路线更改为:

    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));
    }