Как создать Ror стиль Restful маршрутизации в Asp.net MVC Web Api
Как настроить маршрутизацию в asp.net web api, чтобы я мог кодировать следующие действия в своем унаследованном классе ApiController?
| ================================================= ===================================== | |Http Глагол|Путь|Действие|Используется для| | ================================================= ===================================== | | ПОЛУЧИТЬ | / фотографии | индекс | отобразить список всех фотографий | | ПОЛУЧИТЬ | / фото / новый | новый | вернуть HTML-форму для создания новой фотографии | | ПОСТ | / фотографии / | создать | создать новое фото | | ПОЛУЧИТЬ | / фотографии /:id | показать | показать конкретную фотографию | | ПОЛУЧИТЬ | /photos/:id/edit | редактировать | вернуть HTML-форму для редактирования фото | | PUT | / фотографии /:id | обновление | обновить конкретную фотографию | | УДАЛИТЬ | / фотографии /:id | уничтожить | удалить конкретную фотографию |
2 ответа
Решение
Ниже мое собственное рабочее решение для этого:
// Конфигурация маршрута:
//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)
{
}
Я нашел http://restfulrouting.com/ очень полезным. Это позволяет вложенные ресурсы тоже.