これを行う最も簡単な方法は、属性ルーティングを活用することです
例
たとえば、ApiController を含むサンプル クラス ライブラリを考えてみましょう。属性ルーティングを使用して、クラスをルートで装飾できます。
//Inside API controller class library
[RoutePrefix("Persons")]
public class PersonController : ApiController
{
[Route("")]
public List<Person> GetAll()
{
List<Person> results = new List<Person>();
try
{
//TODO: Call Data Access Layer
//FORNOW: Mock up some data
results.Add(new Person() { Name = "Ryan C" });
results.Add(new Person() { Name = "Siavash R" });
}
catch
{
//TODO: Handle error
}
return results;
}
}
上記のコードは、/Persons
適切にルーティングされた HTTP リクエストに応答します。
IIS でホストされる WebApi プロジェクトで、次の操作を行う必要があります。
クラス ライブラリへの参照を追加する
私はこれがおそらく「当然」であることを知っていますが、これを形式としてここに置くだけです. WebApi プロジェクトの API コントローラー クラス ライブラリへの参照を追加する必要があります。
登録方法を作成する
App_Start\RouteConfig.cs
または newでApp_Start\WebApiConfig.cs
、次のように を呼び出しますMapHttpAttributeRoutes();
。
//Inside App_Start\WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Map all Web API routes
config.MapHttpAttributeRoutes();
}
}
ASP.NET フレームワークは、参照されているアセンブリを検索し、パブリック ApiController 派生クラス (この場合は、属性ルーティング用に装飾されたクラス) を探すのに十分なほどスマートです。
Global.asax の呼び出し登録メソッド
最後の手順は、Global.asax ファイルで登録メソッドを実際に呼び出すことです。
//Inside Global.asax
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
その後、あなたは行く準備ができているはずです!ローカルでテストし、完全な例を作成しましたが、問題なく動作します。必要に応じて、サンプル プロジェクトを github に投稿できますが、上記のコードが重要なポイントです。
への呼び出しを行うhttp://localhost:xxxx/Persons/
と、次の結果になりました。
<ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Ryancdotnet.WebApiClassLib.Model">
<Person>
<Name>Ryan C</Name>
</Person>
<Person>
<Name>Siavash R</Name>
</Person>
</ArrayOfPerson>
参考までに、必要に応じて、私の ApiController クラス ライブラリはこれらの Nuget パッケージを使用しました。どれが正確に必要かはわかりませんが、クラス ライブラリにはこれらで十分でした。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net46" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net46" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net46" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net46" />
<package id="System.Web.Http.Common" version="4.0.20126.16343" targetFramework="net46" />
</packages>
ハッピー API イング!