Attribute Routing in ASP.NET Web API 2を使用しています。 MapHttpAttributeRoutes
で属性ルーティングを使用するようにWeb APIを設定してください。次が作る
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
は確かにあなたのようなあなたの例では、あなたが最初のパラメータは整数になりたい場合は、適切
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("api/values/{p1}/{p2}")]
public HttpResponseMessage Get (string p1, string p2) {
...
}
}
あなたもまた
[RoutePrefix("api/values")]
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("{p1}/{p2}")]
public HttpResponseMessage Get (string p1, string p2) {
...
}
}
RoutePrefix
を使用することができ、あなたのコントローラを定義しました。ルート制約と更新メソッドを使用できます。
[RoutePrefix("api/values")]
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("{p1:int}/{p2}")]
public HttpResponseMessage Get (int p1, string p2) {
...
}
}
UPDATE:
は値のコントローラの統合テストを作成し、それは `values`とは何かを持っているかもしれないアクションが
[TestMethod]
public async Task HttpClient_Should_Get_OKStatus_From_Action_With_Multiple_Parameters() {
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
using (var server = new HttpServer(config)) {
var client = new HttpClient(server);
string url = "http://localhost/api/values/100/some+string+here";
using (var response = await client.GetAsync(url)) {
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
}
と呼ばれていたことを確認することができました。 'Home'(あなたのApiControllerの名前が' HomeController'だった場合)のような適切なケースに入れられたコントローラ名に置き換えてみてください。 – Igor
これをチェックする価値がありますhttp://stackoverflow.com/questions/12835074/mvc4-web-api-rest-interface-with-multiple-parameters – terbubbs
私はあなたの問題を複製することはできません。私はWeb-API 2.2の最新バージョンを使用しようとしました。私はさまざまなWeb APIコントローラー名とあなたが投稿したものと全く同じURIとメソッドを使用していましたが、そのたびに値がヒットします。チェックするもの。あなたが定義したクラスが(APIではなく) 'ApiController'から継承していることを確認してください。 webapiconfig.csにデフォルトのルーティング設定を投稿します。起動時にWebApiConfig.csが初期化されていることを確認してください。 – Igor