2014-04-03 24 views
0

我試圖要在這個控制器操作:的Web API路由在動作的名稱,無法識別動詞

public async Task<IHttpActionResult> PostRegister(JObject data) 

當我把這個從HTML頁面返回404錯誤,但是如果我把它改爲:

public async Task<IHttpActionResult> Register(JObject data) 

該呼叫被正確路由。我知道如果我從VS它創建一個Web Api項目,但我從空Web項目模板構建這個項目。它似乎沒有在動作名稱中提取動詞提示。

下面

是路由配置:

public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

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

jQuery的電話:

$.post("api/account/admin/register/", { name: "Me", password: "test" }); 

回答

0

因爲你已經添加{action}作爲路由參數(而不是可選的),你現在需要提供一個每個呼叫的路由參數,即始終提供一個操作。而且它必須匹配的ActionMethod名稱。 Http動詞提示仍然適用於允許的操作(例如,我不能GET api/account/admin/postregister/)。

有幾個選項可供您修復/更改。你可以重寫動作名稱:

[ActionName("Register")] 
public async Task<IHttpActionResult> PostRegister(JObject data) 

或者你可以使用aatribute

[HttpPost] 
public async Task<IHttpActionResult> Register(JObject data) 

把它註冊,只允許職位或者你可以去路由更「RESTful的風格。例如創建一個註冊控制器,並且只需使用POST方法來創建註冊表。

+0

沒關係,你是對的:-) –