問題
MVC4 Web API Beta から RC に切り替えたところMultiple actions were found that match the request ...、サービスで例外が発生しています。
バックグラウンド
には 2 つのPOSTアクションが定義されていますApiController。
public class MyModelController : ApiController
{
    ...
    // POST /mymodel
    public MyModel Post(MyModel model)
    {
       ...
    }
    // POST /mymodel/upload
    [ActionName("Upload")]
    public HttpResponseMessage UploadModelImage()
    {
        HttpRequestMessage request = Request;
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, request));
        }
       ...
    }
}
最初のアクション (デフォルトアクション) は、サービスに渡された JSON からPOST新しいオブジェクトを作成するために使用されます。ポータルのユーザーには、新しいオブジェクトMyModelの作成の一部として画像をアップロードするオプションがあります。この場合、2 番目のアクションを使用してファイルを保存し、新しいオブジェクトをデータベースに永続化します。このアクションは、マルチパート リクエストのコンテンツを読み取り、モデルのプロパティを解析して、CDN にアップロードされた画像を保存します。MyModelUpload
RC に切り替えたので、アップロード アクション (http://www.myapidomain.com/mymodel/upload) は問題なく実行されますが、通常のPOSTアクション (http://www.myapidomain.com/mymodel/) は失敗し、Multiple actions were found that match the request ...上記の両方の方法を競合として引用する例外。
ルートは次のとおりです。
routes.MapHttpRoute(
    "Default", // route name
    "{controller}" // route template
    );
routes.MapHttpRoute(
    "OnlyId", // route name
    "{controller}/{id}", // route template
    new {}, // defaults
    new {controller = @"[^0-9]+", id = @"[0-9]+"} // constraints
    );
routes.MapHttpRoute(
    "OnlyAction", // route name
    "{controller}/{action}", // route template
    new {}, // defaults
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance} // constraints
    );
routes.MapHttpRoute(
    "DependantAction", // route name
    "{controller}/{principalId}/{action}/{dependentId}", // route template
    new {dependentId = System.Web.Http.RouteParameter.Optional}, // defaults
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance} // constraints
    );
ActionNameConstraint{action}が属している必要があることを保証する単なるカスタム制約です。{controller}
質問
ルートをさまざまな順序でいじってみましたが、それで問題が解決するかどうかを確認しました。次の解決策のいずれかに関するヘルプを探しています。
- 私たちのルートの潜在的な問題。
- によるルーティングの代替ソリューションcontent-type。このUploadアクションは、マルチパート フォームの投稿に対してのみ呼び出す必要があります。コンテンツ タイプが JSON または XML の場合は、通常のアクションを使用する必要があります。これが可能であることを示唆するリソースを見つけることができませんでしたが、他の誰かがこれを検討したことを願っています.
- リクエスト コンテンツからファイル ストリームを読み取るためのモデル バインディング アプローチにより、個別のUploadアクションはもう必要ありません。