2013-03-13 48 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)); 
    }