GUIDと整数の両方でGET
ルートをサポートするにはどうすればよいですか?GUIDは理想的ではないことに気づきましたが、今のところそれがそうです。サポートを追加したいユーザーが覚えやすく、何を伝えやすいようにするための整数すべきである一意の「キー」。
ルートの例:
testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1
testcases/1234
私のWebApiConfig
:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
var routes = config.Routes;
routes.MapHttpRoute("DefaultApiWithAction",
"Api/{controller}/{action}");
routes.MapHttpRoute("DefaultApiWithKey",
"Api/{controller}/{key}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), key = @"^\d+$" });
routes.MapHttpRoute("DefaultApiWithId",
"Api/{controller}/{id}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
routes.MapHttpRoute("DefaultApiGet",
"Api/{controller}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
routes.MapHttpRoute("DefaultApiPost",
"Api/{controller}",
new { action = "Post" },
new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
}
私のコントローラー(メソッドシグネチャのみ):
[RoutePrefix("Api/TestCases")]
public class TestCasesController : PlanControllerBase
{
[Route("")]
public OperationResult<IEnumerable<TestCaseDTO>> Get([FromUri] TestCaseRequest request)
[Route("{id}")]
[HttpGet]
public OperationResult<TestCaseDTO> Get(Guid id)
[Route("{key}")]
[HttpGet]
public OperationResult<TestCaseDTO> Get(int key)
...
}
整数を使用してリソースを呼び出そうとするとInternal Server Errorが発生します。どんな助けでもありがたいです!
@SirwanAfifiにありがとう! SO質問で言及された ASP.NETでの属性ルーティング の記事に出くわしましたが、どうやらルート属性の制約の必要性がわかりませんでした。当時の。
私にとっては、トリックを実行するコントローラーメソッドで[Route("{id:guid}")]
および[Route("{key:int}")]
を使用していた。 WebApiConfig
の{id}
および{key}
に関連するHttpルートもコメントアウトして、コントローラーの属性がルーティングの実行に責任があることを確認しました。