1

独自の .Net WebApi ベースの REST サービスを使用して、ネストされた URL に新しい REST リソースを作成するために POST を実行しようとすると、次の問題が発生します。

別の子を追加するために POST を実行したい次の URL api/parents/{parentId}/childrenを想像してください。

これは、「 asp webapi を使用してネストされたリソースを投稿する」で説明されている問題と非常によく似ています。しかし、global.asax では、 routes.MapHttpRoute(...)を使用して、 {parentId}を含む Parents-controller のメソッドと、追加/投稿される Child オブジェクトを呼び出すルートを定義することに成功しません。 :

[HttpPost]
public HttpResponseMessage AddChildToParent(int parentId, Child newChild) {
    //implementation
}

(これは、追加できるオブジェクトを提供しないため、上記の質問の回答との違いでもあります。)

私は Web を検索していましたが、残念ながら解決策を見つけることができませんでした。おそらく、 MapHttpRoute()メソッドのパラメーターとして使用されるデフォルトオブジェクトのセマンティクスの公式ドキュメントさえ見つからなかったためです。

誰でも私の問題の有効なルーティング定義を提案するか、少なくともデフォルトの有用なドキュメントへのリンクを投稿してください-オブジェクトで使用されます MapHttpRoute() ? どうもありがとう!

4

1 に答える 1

0

次の Web API ルーティングを登録関数に追加してみてください。(登録関数は、デフォルトでWebApiApplicationonApplication_Startから継承されSystem.Web.HttpApplication、 function に渡されますGlobalConfiguration.Configure(...)。デフォルトでは、静的クラスで定義されていますWebApiConfig。)

追加

config.Routes.MapHttpRoute(
    name: "PostChild",
    routeTemplate: "api/{controller}/{parentId}/children",
    defaults: new { action = "AddChildToParent" },
    constraints: new
    {
        httpMethod = new HttpMethodConstraint(HttpMethod.Post),
        controller = "Parents"
    }
);

はobject パラメータですconfigHttpConfiguration

次に、URL を介してapi/parents/{parentId}/children次のメソッドParentsControllerが呼び出されます。

public class ParentsController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post([FromUri]int parentId, [FromBody] Child child) {
        //implementation
    }
}

defaultsと のconstraintsパラメーターは両方とも、 MapHttpRouteWeb API 変数名に対応するプロパティ名を持つ匿名オブジェクトであることに注意してください。変数は URL 経由で設定できないためaction、コントローラーの Web API メソッドを指すデフォルト値を取得します。

constraintsオブジェクトは、指定された正規表現への呼び出しを制限します。この場合、それは固定のコントローラー名ですが、複数のコントローラーの場合もあります"(Parents|ParentsAlternative)"。すべての制約が満たされた Web API 呼び出しのみが、ここでコントローラー メソッドが呼び出されますAddChildToParent

ここでのChildオブジェクトは、パラメーター属性で示されているように、HTTP 本文で JSON として渡されます[FromBody]

于 2016-04-05T14:32:04.463 に答える