Visual Studio의 EF 및 스캐 폴딩 webapi 컨트롤러와 함께 WebAPI 2를 사용하고 있습니다. 각 컨트롤러는 4 개의 기본 동사 (GET, PUT, DELETE, POST)와 5 개의 동작으로 생성됩니다. GET 작업에는 두 가지 버전이 있습니다.
IQueryable<entity> GetEntities ()
Task<IHttpActionResult> GetEntity(GUID key)
// 기본값은 int id이지만 guid로 변경했습니다.컨트롤러에 특성 라우팅 및 경로 접두사를 사용하고 있습니다. 더 나은 URL 관리를위한 멋진 키워드입니다.[RoutePrefix("api/v3/Company")]
문제 :
이상적으로는 잘못된 매개 변수가 url로 전송되면 오류를 반환해야하지만 오류가 발생하지 않고 대신 매개 변수가없는 작업으로 돌아갑니다. 잘못된 GUID를 보내면 오류가 표시됩니다.
내가 전화하는 것처럼 : http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e965b2
올바른 결과를 보여줍니다.
내가 전화 할 때 : http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e96500
(잘못된 키)
다시 GetEntity()
기능으로 설정 되고 모든 기록을 보여줍니다.
내가 호출 할 때 : http://localhost:8080/api/v3/Company/1
(GUID 길이 매개 변수가 아님)
동일한 작업을 수행하고 모든 레코드를 표시합니다.
속성을 사용하고 있습니다 [Route("{id:guid}")]
이에 대한 지침을 얻을 수 있다면 정말 감사합니다!
경로가 기본적으로 다시 규칙 기반 매핑으로 설정되었을 가능성이 높습니다. 라우팅이 기본 경로임을 알 수 있도록 작업에 경로 속성을 명시 적으로 적용해야합니다.
[RoutePrefix("api/v3/Company")]
public class CompanyController : ApiController {
//GET api/v3/Company
[HttpGet]
[Route("")] //Default Get
public IQueryable GetEntities() { ... }
//GET api/v3/Company/1f7dc74f-af14-428d-aa31-147628e965b2
[HttpGet]
[Route("{id:guid}")] // ALSO NOTE THAT THE PARAMETER NAMES HAVE TO MATCH
public Task<IHttpActionResult> GetEntity(Guid id) { ... }
//...other code removed for brevity
}
웹 API 구성에서 속성 라우팅이 활성화되어 있는지 확인하십시오.
config.MapHttpAttributeRoutes();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다