我正在尝试使用多个帖子操作创建web api。
我有2个帖子
[HttpPost]
[ActionName("Search")]
public HttpResponseMessage Search(string value)
{
return null;
}
[HttpPost]
public HttpResponseMessage Post([FromBody]CreateModel app)
{
return null;
}
和webApiConfig文件中定义的路由:
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
/ api /控制器与POST命中帖子,/ api / Controller /搜索返回404 - 未找到
有人可以帮忙吗?
答案 0 :(得分:1)
在同一个控制器中执行多个POST操作并没有任何问题,并且您已明确区分它们。
您遇到的问题在于您如何定义路线。您可以观察到两个操作都没有名称为'id'的参数,但您在路线中描述它们。
首先,从您的路线中删除id参数的提及,例如
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
理想情况下,这会将您带到POST方法,如果您在网址中添加/搜索,则会将您带到搜索方法。
此外,您可以使用Web API Route Debugger Nuget package来帮助您确定路线匹配的发生方式,并且当然也会对其进行更正。
答案 1 :(得分:1)
您可以使用attribute routing。
首先,在您的WebApiConfig.cs中,添加
config.MapHttpAttributeRoutes();
然后在路径的Route属性中将路径定义为字符串,如此
[HttpPost]
[Route("api/controller/search")]
public HttpResponseMessage Search(string value)
{
return null;
}
[HttpPost]
[Route("api/controller/create")]
public HttpResponseMessage CreateModel([FromBody]CreateModel app)
{
return null;
}
而且,Search方法更适合使用HTTP / GET。
答案 2 :(得分:0)
对我而言,由于以下原因,路线似乎令程序难以理解:
当您向/ api / Controller / Search发送POST请求时,程序对于去哪里感到困惑: 1)api / {controller} / {action} as {id}在这里是可选的 要么 2)api / {controller} / {id}
两者都有相同的路线结构。因此,对于您给出的示例,路由有两种可能的重定向方式,这将使您获得404。
您的路线必须过滤到一条独特的路径,我相信您需要在此处更改路线。