Quantcast
Channel: てすとぶろぐ
Viewing all articles
Browse latest Browse all 208

ASP.NET WebAPI で .do な呼び出しに対応する

$
0
0

色々ありまして。

ちょっとしたお仕事上の都合で、現在 struts で用意している Java 製の API 群をどうすればリプレースしやすいか考えていてふと思いついたので試してみました。

やろうとしている事は簡単で、~.do で呼び出された際に Struts ではなく ASP.NET WebAPI で動作させるというものです。そうすることでアプリ側の改修なしにサーバー側をまるっとリプレースすることも選択肢とすることができます。

image

とりあえず WebAPI なプロジェクトを新規に用意します。今回はサンプルですので認証は利用しません。まず最初に行う事は WebAPI 用のコントローラの準備です。

image

今回は空の WebAPI コントローラを利用しますが、どれでも構いません。今回は次のような API を用意します。

   1:Imports System.Net
   2:Imports System.Web.Http
   3:  
   4:Namespace Controllers
   5:PublicClass DoSampleController
   6:Inherits ApiController
   7:  
   8:<HttpGet>
   9:PublicFunction Exec1() AsString()
  10:ReturnNewString() {"Sample API", "8888"}
  11:EndFunction
  12:  
  13:EndClass
  14:End Namespace

これで API 本体は準備できたので、次に WebApiConfig の中で行われている WebAPI 用のルーティング設定を修正し、先ほどの API が呼び出されるようなルーティングを設定します。


   1:Imports System
   2:Imports System.Collections.Generic
   3:Imports System.Linq
   4:Imports System.Web.Http
   5:  
   6:PublicModule WebApiConfig
   7:PublicSub Register(ByVal config As HttpConfiguration)
   8:' Web API の設定およびサービス
   9:  
  10:' Web API ルート
  11:         config.MapHttpAttributeRoutes()
  12:  
  13:         config.Routes.MapHttpRoute(
  14:             name:="DefaultApi",
  15:             routeTemplate:="ht/{action}.do",
  16:             defaults:=NewWith {.controller = "DoSample"}
  17:         )
  18:EndSub
  19:End Module

記載したのは 13 行目から 17 行目の部分で、http://(サーバー)/test/~.do とアクセスした際に呼び出されるような設定となります。

通常であればこれくらいで終わるのですが、今回は ~.do という形式にあるように、静的ファイルへのアクセスと近い形式になり、そのままでは IIS がデフォルトで対応していない拡張子の為、404 エラーとなってしまいます。


   1:<system.webServer>
   2:<handlers>
   3:<removename="ExtensionlessUrlHandler-Integrated-4.0"/>
   4:<removename="OPTIONSVerbHandler"/>
   5:<removename="TRACEVerbHandler"/>
   6:<addname="ExtensionlessUrlHandler-Integrated-4.0"path="*."verb="*"type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/>
   7:<addname="DoFileHandler"path="*.do"verb="*"type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/>
   8:</handlers>
   9:</system.webServer>

7 行目にて拡張子 .do に対して TransferRequestHandler を指定し、ASP.NET 側で処理を行えるように指定しています。この設定がないと、静的ファイルとして扱われることとなり HttpHandler を利用する方法で対応することになります。

このような感じで WebAPI を実装すると、.do なアドレスにアクセスすることで Struts 上の API と同様に WebAPI が呼び出されるようになるので、サーバーをまるっと入れ替えることも可能です。


Viewing all articles
Browse latest Browse all 208

Trending Articles