2013-03-13 50 views
1

我有一个ASP.NET MVC4 WebAPI实现,其中我有一个方法来检查注册时用户名是否可用。当用户离开用户名称文本框时,ajax呼叫将通过文本框中的值发布到服务器。调用WebAPI方法传递字符串ID参数

我已经实现这个如下。

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

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

2)我有网页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 
     } 
    }); 

但问题是在服务器发生

+1

什么问题?你其实并没有问过问题! – mattmanser 2013-03-13 09:51:54

回答

1

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

routes.MapHttpRoute(
    name: "ActionApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
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)); 
    }