WCF REST では、厳密な URL テンプレートを定義できました。
ASP.NET MVC Web API 4 に問題があります。
ルートを通常どおり登録しました。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
私のコントローラーには次のメソッドがあります:
// POST /api/documents
public HttpResponseMessage<Document> Post(Document document)
{...}
この URL "http://servername.com:53835/api/Documents/ 1337 " (パラメーター "1337" は存在しない) で POST 要求を送信すると、Post(Document document) メソッドが呼び出されます。しかし、この場合、フレームワークがエラーを表示することを望みます。(例: 「このリクエストの API 呼び出しが見つかりません」)。
REST WCFを使用すると、これを厳密に構成できます...この「構成よりも慣習」についてはあまり熱心ではありません...
また、より複雑な URL テンプレートを作成するにはどうすればよいですか?
- 私はこのようなものが欲しい:
この URL テンプレートを使用した GET リクエストの API: "http://servername.com:53835/api/Documents/1337" は、特定のドキュメント オブジェクトを取得します (作成日、作成者などのメタデータが含まれます ...) .
別の GET リクエストは、次の URL でファイル自体を (ストリームとして) 取得する必要があります: http://servername.com:53835/api/Documents/1337/File
この違いをどのように定義できますか? ドキュメント オブジェクトを取得するための GET メソッドは次のようになります。
// GET /api/documents/5
public HttpResponseMessage<Document> Get(int id)
{...}
同じパラメーター (この場合は「id」) を使用して別のメソッドを定義するにはどうすればよいですか? WCF REST プロジェクトのようにメソッド属性を使用して URL テンプレートを構成する必要がありますか?
{action} プレースホルダーのルーティングを次のように編集できます。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/{controller}/{id}/{action}",
defaults: new { mandant = "profile", id = RouteParameter.Optional, action = RouteParameter .Optional}
);
そして、メソッド属性 [ActionName("File")] と [AcceptVerbs("GET")] を使用できます。
[ActionName("File")]
[AcceptVerbs("GET")]
public HttpResponseMessage FileDownload(int id)
次に、「http://servername.com:53835/api/Documents/1337/File」を呼び出してファイルを取得できます。しかし、これらの「アクション」がもっと必要な場合はどうすればよいでしょうか?
- より複雑な使用例は、繰り返し部分のある URL です。のようなもの:(この場合、私はいくつかのアイテム特性を持っています。この特性の数は可変でなければなりません)
http://servername.com:53835/api/Documents/characteristic_1/characteristic_2/characteristic_3 http://servername.com:53835/api/Documents/characteristic_1/characteristic_2 _ _
特性を持つ部分は、動的/可変である必要があります。