2014-04-03 25 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

没关系,你是对的:-) –