を持っている必要があります私はasp.netのWeb APIプロジェクトを持っている、と私WebApiConfig
ファイルで、私は定義された次のルートを持っている:統合テストのためにルート上の制約エントリの「HTTPMETHOD」文字列値
config.Routes.MapHttpRoute(
name: "Web API Get",
routeTemplate: "api/{controller}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
目的のために、私はHttpSelfHostServer
に、api呼び出しから正しいデータを受け取っていることを確認するようにリクエストしたいと思います。次のように私はHttpRequestMessage
を作っています:
var httpMethod = new HttpMethod("GET");
var request = new HttpRequestMessage(httpMethod, "http://localhost:XXXX/api/User/");
var results = _client.SendAsync(request).Result;
私はこれがUserControllerでのGetメソッドを呼び出し、そのメソッドで定義された結果を返すことを期待します。しかし、代わりに次の例外が発生します。
System.InvalidOperationException:ルートテンプレート 'api/{controller}'を持つルートの制約エントリ 'httpMethod'は、文字列値を持つか、私は、ブラウザでそれを使用する場合IHttpRouteConstraint」
この同じURL(http://localhost:XXXX/api/User/
)がエラーなしで動作しますので、私は問題は、私がHttpClient
を通じてHttpSelfHostServer
にリクエストを送信していた方法でなければならないかなり確信しています。代わりにHttpMethod.Get
定数を使用しようとしましたが、同じエラーが発生しました。
この問題を解決する方法を知っている人はいますか?
http://emilsblog.lerch.org/2012/05/constraint-for-route-parameter.html –
私が提案しているソリューションを使用するためにWebApi Urlオブジェクトにアクセスする権限がありません。ルートの方向がRouteDirection.UrlGenerationであり、httpMethodが見つからないことがわかります(したがって例外です)。 Url.Action()メソッドを使用せずに、リクエストに「GET」という文字列値を持つhttpMethodを取得するにはどうすればよいですか? – scourge192
さて、私はコントローラのUrlオブジェクトと同じことをするUrlHelperクラスを見つけました。しかし、今は構成オブジェクトに関連した新しいエラーが発生しています。私はすぐに詳細を追加して私の質問を更新します... – scourge192