asp.net-mvc - 如何在Asp.net MVC Web Api中创建Ror风格的Restful路由

标签 asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-web-api

如何在 asp.net web api 中配置路由,以便我可以在 ApiController 继承类中为以下操作编写代码?

|======================================================================================|
|Http Verb| Path             | Action   | Used for                                     |
|======================================================================================|
| GET     | /photos          |  index   | display a list of all photos                 |
| GET     | /photos/new      |  new     | return an HTML form for creating a new photo |
| POST    | /photos/         |  create  | create a new photo                           |
| GET     | /photos/:id      |  show    | display a specific photo                     |
| GET     | /photos/:id/edit |  edit    | return an HTML form for editing a photo      |
| PUT     | /photos/:id      |  update  | update a specific photo                      |
| DELETE  | /photos/:id      |  destroy | delete a specific photo                      |

最佳答案

以下是我自己的工作解决方案:
//路由配置:

//GET     | /photos          |  index   | display a list of all photos    
config.Routes.MapHttpRoute(
    name: "DefaultIndex",
    routeTemplate: "api/{controller}",
    defaults: new {action = "Index"},
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

//POST    | /photos/         |  create  | create a new photo
config.Routes.MapHttpRoute(
    name: "DefaultCreate",
    routeTemplate: "api/{controller}",
    defaults: new { action = "Create" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }
);

//GET     | /photos/new      |  new     | return an HTML form for creating a new photo |
config.Routes.MapHttpRoute(
    name: "DefaultNew",
    routeTemplate: "api/{controller}/new",
    defaults: new { action = "New" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

//GET     | /photos/:id      |  show    | display a specific photo    
config.Routes.MapHttpRoute(
    name: "DefaultShow",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { action = "Show" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

//PUT     | /photos/:id      |  update  | update a specific photo   
config.Routes.MapHttpRoute(
    name: "DefaultUpdate",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { action = "Update" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) }
);

//DELETE  | /photos/:id      |  destroy | delete a specific photo 
config.Routes.MapHttpRoute(
    name: "DefaultDestroy",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { action = "Destroy" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Delete) }
);

config.Routes.MapHttpRoute(
    name: "DefaultEdit",
    routeTemplate: "api/{controller}/{id}/edit",
    defaults: new { action = "Edit" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

//ApiController 操作

// GET api/photo
[ActionName("Index")]
public string Get()
{
    return "Index Action called";
}


// GET api/photos/5
[ActionName("Show")]
public string Get(int id)
{
    return "Show action called"
}

// GET api/photos/5/edit
[HttpGet]
public string Edit(int id)
{
    return "Edit action called";
}

// POST api/photos
[ActionName("Create")]
public void Post([FromBody]string value)
{

}

// GET api/photos/new
[HttpGet]
public string New()
{
    return "New called";
}

// PUT api/photos/5
[ActionName("Update")]
public void Put(int id, [FromBody]string value)
{
}

// DELETE api/photos/5
[ActionName("Destroy")]
public void Delete(int id)
{
}

关于asp.net-mvc - 如何在Asp.net MVC Web Api中创建Ror风格的Restful路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17362219/

相关文章:

c# - ASP.NET MVC 页面无法加载并显示 "The resource cannot be found"

c# - 具有空 selectList 参数的 Html.DropDownListFor

c# - 如何在 Razor View MVC C# 中将文本转换为超链接或 ActionLink

c# - 使用 ASP.NET WebAPI v2,如何在 WebAPI 方法中发布 PDF 数据?

c# - 如何在 ASP MVC 中创建自定义路由

c# - 是否可以修改 ASP.NET 捆绑程序以在捆绑文件中包含版本号?

asp.net-mvc - 自动延迟解析 CaSTLe Windsor 中的组件

.net - ASP.NET MVC-MapRoute与route.Add(和404s)

c# - 不了解 DbContext——每个应用程序或每个模型

asp.net-mvc-3 - ASP.NET MVC 3 路由 : prevent ~/home access?