Asp.net web api 如何发布到模式/api/{controller}/{action}/{id}的url?

Asp.net web api 如何发布到模式/api/{controller}/{action}/{id}的url?,asp.net-web-api,asp.net-web-api-routing,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 } } p

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

public class WorkerController : ApiController
{
    //POST
    //api/worker/unregister/<id>
    //http body:
    //status=<status>
    [HttpPost]
    public void Unregister(int status)        
    {
        //stuff
    }
}
public void unregister(int id, fooModel m)
{
    Debug.Print(m.status);
}
…然后我像往常一样传递post参数。其
x-www-form-urlencoded

更新:

尝试了以下操作:

public class WorkerController : ApiController
{

    [HttpGet]
    public void Unregister(int id, int status)        
    {
        //stuff
    }
}
…并传递url,如下所示:

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 }
        );
    }
}

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

像这样更改您的
WebApiConfig.cs

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

你必须通过一个模型。

public class fooModel
{
    public int status {get; set;}
}
该行动应重新编写如下:

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

你能告诉我你是怎么称呼你的朋友的吗method@Nilesh增加了更多的道歉。我可能没有提到我需要
id
status
作为请求的一部分。我意识到,当我提到我像往常一样传递post参数时,这并不是暗示。@deocwalk我没有得到你的答案。。你到底想要什么<代码>路线,同时将
id
状态
作为参数not
路线
。我想让它成为http请求的一部分。不确定是否可以将这两个值都输入到
路径中
。我学到的是,
路由
为我提供了
id
的值(因为我是这样配置的),除非我有一个相应的模型来捕获
状态
(我作为http主体传递),否则我无法获得
状态
的值。因此,在动作的定义中需要一个模型。