gpt4 book ai didi

c# - 使用 WebApi 重叠路由

转载 作者:行者123 更新时间:2023-11-30 22:08:39 32 4
gpt4 key购买 nike

我正在尝试向默认 WebApi 示例添加特殊路由:

常规的是

/api/values(检索所有值)

/api/values/{id}(检索特定值(通过数字 id))

现在我想添加这个 api:

/api/values/special

以前的 api (/api/values/{id}) 应该为所有带有数字 id 的请求提供服务,但是 /api/values/special 应该为那些请求提供服务调用那个特定的 url。

到目前为止,我得到了这个路由:

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

这是为了实现:

public class ValuesController : ApiController
{
// 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/special
public IEnumerable<string> SpecialValues()
{
return new string[] { "special1", "special2" };
}
}

但它会呈现:请求的资源不支持 http 方法“GET”

如果我调用 /api/values/special 并将 [HttpGet] 添加到 SpecialValues 方法,它将起作用但是 /api/values 将停止工作,表示有多个匹配操作。

最佳答案

不需要对 WebApiConfig 进行更改。附加一个 Route 属性和一个 HttpGet 属性。您可以阅读更多相关信息 here .

[HttpGet]
[Route("api/{controller}/special")]
public IEnumerable<string> SpecialValues()
{
return new string[] { "special1", "special2" };
}

WebApiConfig -

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();

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

关于c# - 使用 WebApi 重叠路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122190/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com