4

次のルーティング ルールがあります。

config.Routes.MapHttpRoute(
                name:          "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults:      new { id = RouteParameter.Optional },
                constraints:   new { id = @"\d+"}
            );

そして、これらのアクションを持つ ProductController:

public Product Get(int id)
{
    return _svc.GetProduct(id);
}

public int Post(Product p)
{
   return 0;            
}

Get期待どおりにアクションを呼び出すことができます: GET "api/product/2"

Post次のようにアクションを呼び出すことができると思いました: POST "api/product" しかし、うまくいきません。404 エラーが発生します。ただし、これを行うと機能します: POST "api/product/2"

id のデフォルト値を作成するRouteParameter.Optionalことで、ルーティング ルールに一致するために URL の {id} 部分が存在する必要がないことを意味すると考えました。しかし、それは起こっていないようです。URL に {id} 部分がない別のルールを作成する唯一の方法はありますか?

少し混乱しています。助けてくれてありがとう。

4

2 に答える 2

1

id パラメータに制約を追加しているため、意図したとおりには機能しないと思います。同じシナリオについては、このブログ投稿http://james.boelen.ca/programming/webapi-routes-optional-parameters-constraints/を参照してください。

更新:元のリンクが無効になっているように見えますが、マシンに戻る方法は次のとおりです: https://web.archive.org/web/20160228013349/http://james.boelen.ca/programming/webapi-routes-オプションのパラメーター制約/

于 2013-09-27T05:49:12.040 に答える