1

如何设置路由以支持此功能?

  • GET /api/values/ 有效
  • GET /api/values/1 作品
  • POST /api/values有效
  • PUT /api/values 有效
  • 删除 /api/values有效
  • 获取 /api/values/GetSomeStuff/1 不起作用

如果我切换路线,那么 GetSomeStuff 可以工作,但是 /api/values 不起作用。如何配置路由以使它们都工作?

示例方法:

 // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }

    // GET api/values/5
    [HttpGet]
    public string GetSomeStuff(int id)
    {
        return "stuff";
    }

路线设置如下:

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

2 回答 2

0

如何代替:

GET /api/values/GetSomeStuff/1

你这样设计你的网址:

GET /api/someStuff/1

现在您可以简单地对其SomeStuffController进行Get(int id)操作。

于 2013-04-24T14:22:49.017 回答
0

您可以尝试以下路线:

        config.Routes.MapHttpRoute(
            name: "DefaultController",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"^[0-9]*$" }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultController2",
            routeTemplate: "api/{controller}/{action}/{id2}"
        );

并将您的操作方法更改为:

    [HttpGet]
    public string GetSomeStuff(int id2)
    {
        return "stuff";
    }
于 2013-04-24T15:47:13.167 回答