다음 API 호출의 POST를 처리하고 싶습니다.
/v1/location/deviceid/appid
추가 매개 변수는 포스트 바디에서 제공됩니다.
이 모든 것이 잘 작동합니다. 이제 "deviceid"및 / 또는 "appid"및 / 또는 BodyData를 null로 허용하여 코드를 확장하려고합니다.
/v1/location/deviceid
/v1/location/appid
/v1/location/
이 3 개의 URL은 동일한 경로로 응답해야합니다.
내 첫 번째 접근 방식 (BodyData 필요) :
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
return repository.AddNewLocation(deviceid, appid, BodyData);
}
이것은 작동하지 않고 컴파일 오류를 반환합니다.
"선택적 매개 변수는 끝에 있어야합니다."
다음 시도 :
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
이제 내 함수 AddNewLocation ()은 항상 BodyData=null
-호출이 Body를 보내더라도 가져옵니다 .
마지막으로 3 개의 매개 변수를 모두 선택 사항으로 설정합니다.
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
작동하지 않음 :
선택적 매개 변수
BodyData
는에서 지원되지 않습니다FormatterParameterBinding
.
선택적 매개 변수가있는 솔루션이 필요한 이유는 무엇입니까? 내 컨트롤러는 POST를 통해 "새 위치 추가"만 처리합니다.
잘못된 데이터를 내 자신의 예외 또는 오류 메시지로 보내고 싶습니다. 호출에 누락 된 값이 있더라도. 이 경우 예외를 던지거나 내 코드로 기본값 설정을 결정할 수 있기를 원합니다.
?
라우트 템플릿 안에 제가 찾던 것입니다. +1