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

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 Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,Asp.net Web Api,如何在asp.net web api中配置路由,以便在ApicController继承的类中为以下操作编写代码 |======================================================================================| |Http Verb| Path | Action | Used for | |===============

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

|======================================================================================| |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 | |======================================================================================| |Http动词|路径|动作|用于| |======================================================================================| |获取|/photos |索引|显示所有照片的列表| |获取|/photos/new | new |返回用于创建新照片的HTML表单| |发布|/photos/|创建|创建新照片| |获取|/photos/:id |显示|显示特定照片| |获取|/photos/:id/edit | edit |返回用于编辑照片的HTML表单| |放置|/photos/:id |更新|更新特定照片| |删除|/photos/:id |销毁|删除特定照片|
下面是我自己的工作解决方案:
//路由配置:

//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)
{
}

我发现它非常有用。它还允许嵌套资源。

您是要返回浏览器友好的HTML页面、API样式的数据响应,还是两者兼而有之?在我看来,您似乎在尝试返回HTML,在这种情况下,您不想使用WebAPI。大家好,Brian,我正在返回json,使用Knockout和SammyJS在一个单页应用程序上工作。你们都错了,这不是restful。Restful并没有说url中有CRUD名称。休息完全不是这样做的。您在httprequest中使用HTTP动词来确定您是否正在执行更新、创建、删除(因此GET、POST等)决定操作,您不应该在url中使用您的操作。将RESTful url映射到控制器中的操作方法。在控制器中,您将有方法创建、删除、更新。不是名为GEt的方法。你倒过来了。嗯,我假设你没有使用过WebApi?在这种情况下,他的例子非常好。他之所以编写GET,是因为框架将其作为该控制器中给定函数的HttpGet。