SlideShare a Scribd company logo
ASP.NETMVCのルーティング設定を
少しだけ REST っぽくする少しだけ REST っぽくする
Id:dany1468
Case
今回は、ASP.NETMVCでアプリケーションを作
る中で、ルーティング設定に悩んだ経験
から、特にREST的なルーティングを構築から、特にREST的なルーティングを構築
する必要があった場合の事をケースとし
ています。
ASP.NETMVCのルーティング設定の復習ASP.NETMVCのルーティング設定の復習
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
DefaultDefinition
"{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = UrlParameter.Optional } );
Action HTTP Method URL
Index GET /books
Create GET /books/create
DefaultControllerMapping(BooksController)
Create GET /books/create
Create POST /books/create
Details GET /books/details/1
Edit GET /books/edit/1
Edit POST /books/edit/1
Delete POST /books/delete/1
public class BooksController : Controller
{
public ActionResult Index() { }
public ActionResult Details(int id) { }
public ActionResult Create() { }
[HttpPost]
DefaultController(BooksController)
[HttpPost]
public ActionResult Create(FormCollection collection) { }
public ActionResult Edit(int id) { }
[HttpPost]
public ActionResult Edit(int id, FormCollection collection) { }
public ActionResult Delete(int id) { }
[HttpPost]
public ActionResult Delete(int id, FormCollection collection) { }
}
Sample(BooksController)
@Html.ActionLink("Create Link", "Create", "Books")
@Html.ActionLink(“Create Link”, “Create”)// no controller
<a href="@Url.Action("Create", "Books")">link</a>
@using (Html.BeginForm("Create", "Books")) { }@using (Html.BeginForm("Create", "Books")) { }
<a href="/Books/Create">Create Link</a>
<a href="/books/Create">Create Link</a>
<a href="/Books/Create">link</a>
<form action="/Books/Create" method="post">/* */</form>
OtherNameDefinition
routes.MapRoute(
"OtherName",
"book_other/{action}/{id}","book_other/{action}/{id}",
new {controller = "Books", // fixed controller
action = "Index",
Id = UrlParameter.Optional});
Sample
@Html.ActionLink("Create Link", "Create", "Books")
@Html.ActionLink(“Create Link”, “Create”)// no controller
<a href="@Url.Action("Create", "Books")">link</a>
@using (Html.BeginForm("Create", "Books")) { }
NoChangeNoChange@using (Html.BeginForm("Create", "Books")) { }
<a href="/book_other/Create">Create Link</a>
<a href="/book_other/Create">Create Link</a>
<a href="/book_other/Create">link</a>
<form action="/book_other/Create" method="post"></form>
NoChangeNoChange
GET /book_other (or /books *default)
NestedController
(BookShelfController&BooksController)
routes.MapRoute(
"InBookShelf",
"bookshelves/{shelfId}/books/{action}/{id}","bookshelves/{shelfId}/books/{action}/{id}",
new {controller = "Books",
action = "Index",
Id = UrlParameter.Optional});
booksの部分が{controller} のプレースホルダでも同じ
Sample.01
@Html.ActionLink("Create Link", "Create", "Books")
@Html.ActionLink(“Create Link”, “Create”)// no controller
<a href="@Url.Action("Create", "Books")">link</a>
@using (Html.BeginForm("Create", "Books")) { }
NoChangeNoChange
<a href="/bookshelves/1234/books/Create">Create Link</a>
<a href="/bookshelves/1234/books/Create">Create Link</a>
<a href="/bookshelves/1234/books/Create">link</a>
<form action="/bookshelves/1234/books/Create"
method="post"></form>
GET /bookshelves/1234/books
Sample.02:useroutename
@Html.RouteLink("Create Link", "InBookShelf",
new { action = "Create" })
<a href="@Url.RouteUrl("InBookShelf",
new { action = "Create" })">link</a>
@using (Html.BeginRouteForm("InBookShelf",
<a href="/bookshelves/1234/books/Create">Create Link</a>
<a href="/bookshelves/1234/books/Create">link</a>
<form action="/bookshelves/1234/books/Create"
method="post"></form>
GET /bookshelves/1234/books
@using (Html.BeginRouteForm("InBookShelf",
new { action = "Create" })) { }
まとめ
• デフォルトはControllerとの規約で解決
• 独自のルーティングを作っても View 側で
は Controller に対する直接指定でOK。は Controller に対する直接指定でOK。
• ネストされたような Controller の構成でも、
View 側 (or デフォルト) で Controller が指
定できていれば、その Controller に対する
リクエストとして解釈してくれる。
REST
(RepresentationalStateTransfer)(RepresentationalStateTransfer)
最近はASP.NETMVCの開発に関わらず、意識す
る事が多くなって来ました。
ASP.NETMVC4WebAPIはRESTが意識されたURLの作
りになっていますよね。
ASP.NETMVC4WebAPIはRESTが意識されたURLの作
りになっていますよね。
中でも・・・
RailsスタイルのRESTが比較的よく言及さ
れる印象があります。
ASP.NETMVCとRailsではどのようにルーティ
ングが違うのでしょうか?
(ASP.NETMVC4WebAPIはここでは扱わない)
Rails&ASP.NETMVC RoutingApproach
Action
HTTP
Method
URL
Index GET /books
Create GET /books/create
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
ASP.NETMVC Rails
Create GET /books/create
Create POST /books/create
Details GET /books/details/1
Edit GET /books/edit/1
Edit POST /books/edit/1
Delete POST /books/delete/1
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
Rails&ASP.NETMVC RoutingApproach
Action
HTTP
Method
URL
Index GET /books
Create GET /books/create
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
ASP.NETMVC Rails
Create GET /books/create
Create POST /books/create
Details GET /books/details/1
Edit GET /books/edit/1
Edit POST /books/edit/1
Delete POST /books/delete/1
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
特にeditの部分が異なるが、それ以外にも全体として、
ASP.NETMVCはURLに動詞が入る形で構成される
Railsが完全にRESTだという
訳ではないと思いますが、
Railsスタイルは割りと上手くいっ
ているイメージ。
•URLがデフォルトでも違和感があまり
無い
•リソースをベースにルーティング設定
も考えられていて自然に使える
復習の部分で見た通り、ASP.NET
MVCのRoutingも柔軟なのでRailsスMVCのRoutingも柔軟なのでRailsス
タイルを実現する事も可能です。
ASP.NETMVCでRailsスタイルのRoutingを書くASP.NETMVCでRailsスタイルのRoutingを書く
GoalイメージはRailsスタイル
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
(Rails)
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
PUT,DELETEに関しては、HttpMethodOverrideで対応します。
Idに関しては数字限定という体で定義します。
public class BooksController : Controller
{
public ActionResult Index() { }
public ActionResult New() { }
public ActionResult Show(int id) { }
[HttpPost]
RailsStyleController(BooksController)
[HttpPost]
public ActionResult Create(FormCollection collection) { }
public ActionResult Edit(int id) { }
[HttpPut]
public ActionResult Update(int id, FormCollection collection) { }
public ActionResult Delete(int id) { }
[HttpDelete]
public ActionResult Destory(int id, FormCollection collection) { }
}
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@Html.ActionLink(“Link",
"Index", "Books")
<a href="/Books">Link</a>
routes.MapRoute(
"index",
"{controller}",
new { action = "index" },
new { httpMethod = new HttpMethodConstraint("GET") });
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@Html.ActionLink(“Link",
"New", "Books")
<a href="/Books/new">Link</a>
routes.MapRoute(
"new",
"{controller}/new",
new { action = "new" },
new { httpMethod = new HttpMethodConstraint("GET") });
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@using (Html.BeginForm("Create",
“Books”, FormMethod.Post)) { }
<form action="/Books"
method="post"></form>
routes.MapRoute(
"create",
"{controller}",
new { action = "create" },
new { httpMethod = new HttpMethodConstraint("POST") });
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@Html.ActionLink(“Link",
"Show", "Books“,
new { Id = 1234 })
<a href="/Books/1234">Link</a>
routes.MapRoute(
“show",
"{controller}/{id}",
new { action = “show" },
new { id = @“¥d+“,
httpMethod = new HttpMethodConstraint("GET") });
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@Html.ActionLink(“Link",
"Edit", "Books“,
new { Id = 1234 })
<a href="/Books/1234/Edit">
Link</a>
routes.MapRoute(
“edit_delete",
"{controller}/{id}/{action}",
new { action = “edit|delete” }, // delete フォームも同じ
new { id = @“¥d+“,
httpMethod = new HttpMethodConstraint("GET") });
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@using (Html.BeginForm("Update",
“Books”, new { Id = 1234 },
FormMethod.Post)) {
@Html.HttpMethodOverride(HttpVerbs.Put
)
}
<form action="/Books/1234/Update"
method="post">
<input name="X-HTTP-Method-Override"
type="hidden" value="PUT">
routes.MapRoute(
"update",
"{controller}/{id}",
new { action = "update" },
new { id = @“¥d+“,
httpMethod = new HttpMethodConstraint("PUT") });
type="hidden" value="PUT">
</form>
Action
HTTP
Method
URL
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
@using (Html.BeginForm("Destroy",
“Books”, new { Id = 1234 },
FormMethod.Post)) {
@Html.HttpMethodOverride(HttpVerbs.Del
ete)
}
<form action="/Books/1234/Destroy"
method="post">
<input name="X-HTTP-Method-Override"
type="hidden" value=“DELETE">
routes.MapRoute(
"destory",
"{controller}/{id}",
new { action = "destroy" },
new { id = @“¥d+“,
httpMethod = new HttpMethodConstraint("DELETE")});
type="hidden" value=“DELETE">
</form>
Defaultの定義から考えるとルー
ティングの設定は相当数増えま
したが、素直にRailsスタイルにしたが、素直にRailsスタイルに
近づける事ができました。
ただし、これをさらにネストした
リソースや、少し特別なルーティ
ングを定義するだけで、同じよう
なルーティング設定を書き続けな
ければなりません。ければなりません。
そもそも、Railsではこんな大変では
ないはずです。
Railsにおけるルーティング指定方法
resoucesの機能を一部抜粋resoucesの機能を一部抜粋
http://railsdoc.com/routes
resources sample.01
resources :books
Action HTTP Method URL
これだけで、以下のURLを全て生成
Index GET /books
New GET /books/new
Create POST /books
Show GET /books/1
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
resources sample.02
Action HTTP Method URL
Index GET /books
resources :books, :only => [:index]
リソースの指定はするが、アクションを限定する
resources :books, :except => [:index, :show]
Action HTTP Method URL
New GET /books/new
Create POST /books
Edit GET /books/1/edit
Update PUT /books/1
Destroy DELETE /books/1
リソースの指定はするが、アクションを一部除外する
resources sample.03
resources :books, :path => "/otherbooks"
Action HTTP Method URL
Index GET /otherbooks
ControllerはbooksだがURLを置き換える
Index GET /otherbooks
New GET /otherbooks/new
Create POST /otherbooks
Show GET /otherbooks/1
Edit GET /otherbooks/1/edit
Update PUT /otherbooks/1
Destroy DELETE /otherbooks/1
resources sample.04
ネストされたリソースを表現する
resources :bookshelves do
resources :books
end
Action HTTP Method URL
Index GET /bookshelves/:shelf_id/books
New GET /bookshelves/:shelf_id/books/new
Create POST /bookshelves/:shelf_id/books
Show GET /bookshelves/:shelf_id/books/:id
Edit GET /bookshelves/:shelf_id/books/:id/edit
Update PUT /bookshelves/:shelf_id/books/:id
Destroy DELETE /bookshelves/:shelf_id/books/:id
ネストされたリソースを表現する
resourcesのDSLを見るだけでも、かな
り簡単に指定ができる事が分かる。
Rails4でmatchが無くなったが、match
はASP.NETMVCの標準のルート設定に
近いもの。近いもの。
Railsはワイルドカード的にルーティ
ングがマッチしてしまう事を避け
ようとしているようである。
resourcesのようなDSLがある事で、ワ
イルドカードを使わなくても簡単
に指定できるようにし、開発者にに指定できるようにし、開発者に
明示的にルーティングを指定する
事を推進しようとしているのだろ
う。
ASP.NETMVCでも同じ事ができないか?ASP.NETMVCでも同じ事ができないか?
RestfulRoutingRestfulRouting
RestfulRoutingRestfulRouting
http://www.restfulrouting.com/
RestfulRouting
•RestfulRoutingforASP.NETMVC,basedontheRubyonRailsrouting
DSL.
•RailsのルーティングDSLにインスパイアされ
たプロジェクトらしいたプロジェクトらしい
•元々ASP.NETMVCはRailsのmatchに似た設定記法で
あったし(どちらが先かは知りません)、機能も近
いものがあった。
•それに加えてresouce,resources関連のDSLがサポー
トされている模様。(まだまだ絶賛開発中のようで
すが。)
QuickStart
http://www.restfulrouting.com/quickstart
1. Nugetでインストール
2. Routes.csが作成されるので、そこにルート定義
PM> Install-Package RestfulRouting
2. Routes.csが作成されるので、そこにルート定義
を追加していく
3. ViewEngineをRestfulRouting用に差し替える。Area
を使う場合だけでも良い。(RazorViewEngine の継
承なので差し替えても問題無い)
4. これで後は書き進めるだけ。
Railsのresourcesのサンプルに合わせて、
RestfulRoutingのResourcesを紹介。RestfulRoutingのResourcesを紹介。
resources sample.01
resources :books
Rails
RestfulRouting
map.Resources<BooksController>();
RestfulRouting
resources sample.02
resources :books, :only => [:index]
map.Resources<BooksController>(books => books.Only(“index”));
Rails
RestfulRouting
resources :books, :except => [:index, :show]
map.Resources<BooksController>(books => books.Only(“index”));
map.Resources<BooksController>(books => books.Except("index",
"show"));
Rails
RestfulRouting
resources sample.03
resources :books, :path => "/otherbooks"
Rails
RestfulRouting
map.Resources<BooksController>(
books => books.As("otherbooks"));
RestfulRouting
resources sample.04
resources :bookshelves do
resources :books
end
Rails
map.Resources<BookShelvesController>(
bookshelves => bookshelves.Resources<BooksController>()
);
RestfulRouting
RestfulRoutingまとめ
• RestfulRoutingを使えば、Railsスタイルのルーティン
グが簡単に書ける。
• Controllerとの対応関係も明確になるので、ルー
ティング設定が分かりやすくなるかも。ティング設定が分かりやすくなるかも。
•RestfulRoutingは、実装的にはRouteCollectionへの設
定のDSLでしかない。RouteHandlerやMvcHandler,
ControllerFactory等のフレームワークのパイプライン
に手を入れている訳ではないので、問題が出た
際も対応しやすい。ソースコードも大きくない。
ASP.NETMVCのルーティング設定を
少しだけ REST っぽくする少しだけ REST っぽくする
Id:dany1468

More Related Content

What's hot

EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
katanyan
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
Cherry Pie Web
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
regret raym
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
arisu yano
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210cmtomoda
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
Masao Maeda
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Hideki Hashizume
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
なべ
 
WordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまでWordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまで
Takashi Uemura
 
Rails Controller Fundamentals
Rails Controller FundamentalsRails Controller Fundamentals
Rails Controller Fundamentals
Takashi SAKAGUCHI
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
kenjis
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
Toshio Ehara
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
Masashi Shinbara
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
Hayato Mizuno
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
Hidekazu Ishikawa
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
 

What's hot (20)

EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
Pjax1
Pjax1Pjax1
Pjax1
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
WordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまでWordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまで
 
Rails Controller Fundamentals
Rails Controller FundamentalsRails Controller Fundamentals
Rails Controller Fundamentals
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 

Similar to ASP.NET MVC のルーティング設定を少しだけ REST ぽくする

Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Hideki Hashizume
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Tasuku Otani
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
Ruby on Rails の規約
Ruby on Rails の規約Ruby on Rails の規約
Ruby on Rails の規約
Shuhei Iitsuka
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
Takenori Nakagawa
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails Tutorial
Ken Iiboshi
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
miso- soup3
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
Takahiro Hidaka
 
RESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScriptRESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScript
Naoto Koshikawa
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
Ayumi Goto
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5ichikaway
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
daisuke shimizu
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Shigeru Hanada
 
Erlang Web
Erlang WebErlang Web
Erlang Web
Ngoc Dao
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
LearningTech
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
Fujio Kojima
 

Similar to ASP.NET MVC のルーティング設定を少しだけ REST ぽくする (20)

Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Ruby on Rails の規約
Ruby on Rails の規約Ruby on Rails の規約
Ruby on Rails の規約
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails Tutorial
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
RESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScriptRESTful APIとしてのRailsとクライアントとしてのJavaScript
RESTful APIとしてのRailsとクライアントとしてのJavaScript
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
Erlang Web
Erlang WebErlang Web
Erlang Web
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 

Recently uploaded

CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 

Recently uploaded (14)

CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 

ASP.NET MVC のルーティング設定を少しだけ REST ぽくする