Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 同一控制器中的多个post方法_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api2_Asp.net Web Api Routing - Fatal编程技术网

Asp.net mvc 同一控制器中的多个post方法

Asp.net mvc 同一控制器中的多个post方法,asp.net-mvc,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,我正在尝试创建具有多个post操作的web api 我有两个帖子 [HttpPost] [ActionName("Search")] public HttpResponseMessage Search(string value) { return null; } [HttpPost] public HttpResponseMessage Post([FromBody]CreateModel app) {

我正在尝试创建具有多个post操作的web api

我有两个帖子

    [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 }
        );
/带有POST hit POST的api/控制器,/api/控制器/搜索返回404-未找到


有人能帮我一下吗?

对我来说,由于以下原因,程序很难理解这条路线:

当您向/api/Controller/Search发送POST请求时,程序对去哪里感到困惑: 1) api/{controller}/{action}as{id}在这里是可选的 或 2) api/{controller}/{id}

两者具有相同的路由结构。所以,对于您给定的示例,有两种可能的路由重定向方法,这将使您在404上着陆


您的路线必须向下过滤到一个唯一的路径,我相信您需要在此处更改路线。

在我看来,由于以下原因,程序难以理解路线:

当您向/api/Controller/Search发送POST请求时,程序对去哪里感到困惑: 1) api/{controller}/{action}as{id}在这里是可选的 或 2) api/{controller}/{id}

两者具有相同的路由结构。所以,对于您给定的示例,有两种可能的路由重定向方法,这将使您在404上着陆


您的路线必须向下过滤到一个唯一的路径,我相信您需要在此处更改路线。

在同一控制器中进行多个POST操作没有什么错,您已经清楚地区分了它们

您案例中的问题在于如何定义路线。您可以观察到这两个操作都没有名为“id”的参数,但您正在路由中描述它们

首先,从路由中删除id参数,例如

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { action = RouteParameter.Optional }
    );
理想情况下,这应该带您到POST方法,若您在URL中添加/搜索,它应该带您到搜索方法


此外,您还可以使用来帮助您识别路由匹配是如何发生的,并对其进行纠正。

在同一控制器中进行多个POST操作没有什么错,您已经清楚地区分了它们

您案例中的问题在于如何定义路线。您可以观察到这两个操作都没有名为“id”的参数,但您正在路由中描述它们

首先,从路由中删除id参数,例如

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { action = RouteParameter.Optional }
    );
理想情况下,这应该带您到POST方法,若您在URL中添加/搜索,它应该带您到搜索方法

此外,您可以使用来帮助您确定路线匹配是如何发生的,并对其进行纠正。

您可以使用

首先,在WebApiConfig.cs中添加

config.MapHttpAttributeRoutes();
然后在方法的route属性ontop中将路由定义为字符串,如下所示

[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;
}
而且,搜索方法更适合使用HTTP/GET

你可以用这个

首先,在WebApiConfig.cs中添加

config.MapHttpAttributeRoutes();
然后在方法的route属性ontop中将路由定义为字符串,如下所示

[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;
}
而且,搜索方法更适合使用HTTP/GET