Web API路由无法识别Action的名称中的动词

时间:2014-04-03 19:41:53

标签: asp.net-web-api

我正在尝试POST到此控制器操作:

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 call:

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

1 个答案:

答案 0 :(得分:0)

由于您已将{action}添加为路由参数(而非可选路径参数),因此您现在需要为每个呼叫提供该路由参数,即始终提供操作。它必须匹配 ActionMethod名称。 Http动词提示仍然适用于允许的操作(例如,我无法GET api/account/admin/postregister/)。

您可以选择修改/更改选项。您可以覆盖操作名称:

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

或者您可以将其称为注册,并且仅允许使用属性

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

或者你可以采用更“RESTful”的路由方式。例如,创建一个注册控制器,并简单地使用POST方法来创建注册。