我正在尝试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" });
答案 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方法来创建注册。