如何对模式/ api / {controller} / {action} / {id}的网址发帖?

时间:2014-01-23 08:34:13

标签: asp.net-web-api asp.net-web-api-routing

我的控制器方法编写如下:

public class WorkerController : ApiController
{
    //POST
    //api/worker/unregister/<id>
    //http body:
    //status=<status>
    [HttpPost]
    public void Unregister(int status)        
    {
        //stuff
    }
}

每当我提出请求时,都会说资源未找到(404)。

接线的正确方法是什么?

编辑:使用PostMan chrome扩展程序连接呼叫 - 休息客户端:

http://localhost:xxxx/api/worker/unregister/3

...然后像往常一样传递post参数。其x-www-form-urlencoded

更新

尝试以下方法:

public class WorkerController : ApiController
{

    [HttpGet]
    public void Unregister(int id, int status)        
    {
        //stuff
    }
}

...并传递了如下网址:

http://localhost:xxxx/api/worker/unregister/3?status=-1

这很有用!

但为什么没有其他工作。这是WebApiConfig.cs中的代码:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {            

        config.Routes.MapHttpRoute(
            name: "ServiceApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您使用status作为参数名称,而在WebApiConfig.cs中您使用id作为参数名称

像这样更改WebApiConfig.cs

 config.Routes.MapHttpRoute(
            name: "ServiceApi",
            routeTemplate: "api/{controller}/{action}/{status}",
            defaults: new { status = RouteParameter.Optional }
        );

答案 1 :(得分:-1)

啊,我想通了!

您必须传递模型。

public class fooModel
{
    public int status {get; set;}
}

该行动应重写如下:

public void unregister(int id, fooModel m)
{
    Debug.Print(m.status);
}