Hem GUID hem de tamsayı için GET
yollarını nasıl destekleyebilirim? GUID'lerin ideal olmadığının farkındayım, ama şimdilik bunun için var. Kullanıcıların, 'un benzersiz "anahtarlar" olması gerektiğini hatırlamasını ve iletmesini kolaylaştırmak için tamsayılar için destek eklemek istiyorum.Web API Rotaları hem GUID hem de tamsayı kimliklerini desteklemek için
Örnek yolları:
testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1
testcases/1234
Benim 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) });
}
My kontrolör (yöntem imzalar için):
[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)
...
}
Bir iç sunucu hatası alıyorum Kullanarak kaynağı aramayı deniyorum tamsayı. Herhangi bir yardım takdir edilir!
Bir dize alan ve bazı denetimler yapan tek rota? –
Bu cevaba bir bakın: http://stackoverflow.com/questions/14353466/overload-web-api-action-method-based-on-parameter-type –