命名規則にあるように、WebApiコントローラーアクションの名前はGet()、Put()である必要があります。 Post()など。しかし、コントローラーがCustomerControllerであるかどうかを教えてください。ここで、その中に2つのアクションを入れたいと思います。 1つはGetCustomerById(int id)で、もう1つはGetCustomerByAge(int age)です。ここでは、両方のアクションが1つのパラメーターをintとして受け入れます。
したがって、URLを"api/customer /"のようにユーザーフレンドリーにしたい場合は、アクションの命名規則に従ってGet(int id)/ Get(int age) )、どうすればよいですか?
ルーティング時にWebApiでアクション名を検索する場合は、App_StartフォルダーのWebApiConfig.csクラスを以下に変更します。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
次に、GETリクエストを行うことができます
http://mysite/api/customer/GetCustomerById/1
また、理解を深めるために、以下の記事を検討することをお勧めします。
別の方法は、HTTPメソッド属性です。
HTTPメソッドの命名規則を使用する代わりに、アクションメソッドをHttpGet、HttpPut、HttpPost、またはHttpDelete属性で装飾することにより、アクションのHTTPメソッドを明示的に指定できます。
次の例では、FindProductメソッドがGETリクエストにマップされています。
public class ProductsController : ApiController
{
[HttpGet]
public Product FindProduct(id) {}
}
アクションに複数のHTTPメソッドを許可する、またはGET、PUT、POST、およびDELETE以外のHTTPメソッドを許可するには、HTTPメソッドのリストを取得するAcceptVerbs属性を使用します。
public class ProductsController : ApiController
{
[AcceptVerbs("GET", "HEAD")]
public Product FindProduct(id) { }
}
これは、手紙の基準に従うことが実際にはあまり役に立たない状況の1つです。
1つの解決策は、RESTスタイルから逸脱できるようにすることです。
2つのgetメソッドがあります。
1つはGetByID、もう1つはGetByAgeである可能性があります。
ルートは次のようになります。
api/customer/getbyage/20 api/customer/getbyid/1134
これは正確にはREST)ではありませんが、十分に近く、1つの例外で何も壊れません。
私のポイントは、製品が理にかなっているのに役立つ実装を使用し、標準についてあまり心配しないことです。
RestfulサービスのURIにCRUD関数名を含めないでください( https://restfulapi.net/resource-naming/ )
これはより適切です:
getByIdの場合-http://mysite/api/customers/123
getByAgeの場合-http://mysite/api/customers?age=21