如何让MVC4 Web API支持HTTP动词和“动作”?方法

本文关键字:动作 方法 HTTP MVC4 Web 支持 API | 更新日期: 2023-09-27 18:10:46

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

  • GET/api/values/works
  • GET/api/values/1 works
  • POST/api/values works
  • PUT/api/values works
  • DELETE/api/values works
  • GET/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 }
        );

如何让MVC4 Web API支持HTTP动词和“动作”?方法

您可以尝试以下路径:

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

不如改成:

GET /api/values/GetSomeStuff/1

你的url是这样设计的:

GET /api/someStuff/1

现在你可以简单地在它上面有一个SomeStuffController和一个Get(int id)动作