웹API의 일부로 2 개의 라우트가 있습니다. 이들은 동일한 매개 변수를 허용하지만 라우트에는 다른 정적 구성 요소가 있습니다. 그러나 그들은 요청하는 동안 둘 다 호출됩니다.WebAPI, 다중 라우트가 호출되고 있습니다.
[HttpGet]
[Route("things/{id}/config/{optional?}")]
public dynamic ThingsConfig(int id, int optional = 0)
{
// stuff happens
}
그리고
[HttpGet]
[Route("things/{id}/data/{optional?}")]
public dynamic ThingsData(int id, int optional = 0)
{
// stuff happens
}
난 다음에서 [경로] 줄을 주석 경우 Global.asax에 나의 경로 설정은 상자 버전
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { action = "get", id = RouteParameter.Optional }
);
의 외부에서 변경되지 않습니다 API는 예상대로 404 오류를 반환합니다. 그러나 하나 개의 경로가 다음에 액세스 할 때이있을 때 둘 다 예를 들면 다음과 같습니다
http://localhost/api/things/1/config/
는 ThingsConfig 및
ThingsData
모두 내가 잘못 여기에 무슨 짓을 호출 할 것인가?업데이트 :
나는이 문제를 단순화하려고 노력했다.
새로운 VS 2015 솔루션을 만듭니다. 파일 -> 새로 만들기 -> 웹
선택 "웹 API"
-> 프로젝트확인 .NET 프레임 워크 4.5 "ASP.NET 웹 응용 프로그램 (.NET 프레임 워크)"C 번호에 따라 선택 를 선택 이 자체 -
추가 RoutePrefix 컨트롤러 자체에 :
"변경 인증" "어떤 인증"
는 값 컨트롤러를 다음과 같이 변경 제작 (것들을 조금 단순화 없습니다)하기 필요하다. 내 두 개의 테스트 경로를 추가 - 그래서 컨트롤러의 머리는 이제 다음과 같습니다
[RoutePrefix("api/values")]
public class ValuesController : ApiController
{
[HttpGet]
[Route("things/{id}/config/{optional?}")]
public dynamic ThingsConfig(int id, int optional = 0)
{
return "Config";
}
[HttpGet]
[Route("things/{id}/data/{optional?}")]
public dynamic ThingsData(int id, int optional = 0)
{
return "Data";
}
다른 변화가 기본 프레임 워크로 제작되지 않았다.
http://localhost:<port>/api/values/things/1/config
http://localhost:<port>/api/values/things/1/data
내가 기대 한 것처럼이 작동 :
그런 다음 두 개의 경로를했다. 각 경로를 개별적으로 호출 할 수 있습니다.하지만 원래의 솔루션은 여전히 두 경로 모두를 호출 할 수 있습니다. 누구나 내가 이것을 허용 할 수있는 부분을 바꿀 수 있다고 제안 할 수 있습니까?
이 솔루션과 원래 솔루션의 차이점은 무엇입니까? 나는 둘 다 같다고 생각합니다. –
에티켓이 무엇인지 확실하지 않습니다. 문제는 클라이언트가 호출 한 API와 관련이 없습니다. 둘 다 실제로 부름을 받았다. 방금 질문에 대답해야합니까 아니면 비 문제였던 그대로 삭제해야합니까? 사람들이 도우려고 노력하면서 그것이 사라지 길 바라지 마십시오. – Morvael
Bdw에 "routes.MapMvcAttributeRoutes();"가 추가되었습니다. route.MapRoute (...) 메소드 앞에있는 RouteConfig의이 라인? Plz이 추가하고 한 번 확인하고 알려주세요. –