c# - 与 WebApi 重叠的路由

标签 c# asp.net-web-api

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

常规的是

/api/values(检索所有值)

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

现在我想添加这个API:

/api/values/special

以前的 api (/api/values/{id}) 应为所有带有数字 ID 的请求提供服务,但 /api/values/special 应为以下请求提供服务:调用该特定网址。

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

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/

相关文章:

c# - 使用 MVC 2 中手动定义的 SelectListItems 中的 SelectList 呈现问题

c# - CLR 如何在运行时区分不同程序集中同名但没有命名空间的类?

c# - C#.NET 中的大数字

asp.net - 用于 vs 2010 安装和配置的 Web API

c# - 是否可以注入(inject)到asp.net web api模型类中

c# - 创建自动生成的整数不起作用

c# - 如何避免重复的 try catch block

c# - RestSharp:反序列化 json 字符串

angular - 如何在同一个azure应用程序服务中部署 Angular 应用程序和Web API?

javascript - 如何组织每个 View 的 javascript 代码?