2014-11-14 3 views
1

일부 클라이언트 응용 프로그램을 인증하는 데 appKey 쿼리 문자열 매개 변수를 사용하고 있습니다.ASP.NET 웹 API에서 라우팅 할 때 쿼리 문자열의 일부가 무시됩니다.

예 요청 : MyServer를/mydata을 appKey = 12345

나는 appKey을 검증하는 DelegatingHandler, 그래서 실제로 요청을 서비스하고있을 때 나는 나중에 필요하지 않습니다?. 그러나 필요하지 않더라도 다음과 같은 메서드 서명을 추가해야합니다. 그렇지 않으면 NotFound가 반환됩니다.

public HttpResponseMessage GetMyData(string appKey) 

쿼리 문자열에 appKey 매개 변수가 있어도 요청을 처리하기 위해 다음 방법을 사용할 수 있습니까?

public HttpResponseMessage GetMyData() 
+0

그리 명확 수 없다 처리하는 코드. 'public HttpResponseMessage GetMyData (string appKey = null)'과 같은 것을 의미합니까? –

+0

아니, 정확히 다음과 같음을 의미합니다. public HttpResponseMessage GetMyData() – papadi

+0

매우 혼란 스럽습니다. 좀 더 자세히 알려주세요. 정확한 URL과 원하는 방법은 무엇입니까? –

답변

0

한편 나는 하나 개의 솔루션을 발견했다. 메시지 처리기 코드에서 Message.RequestUri를 변경하고 쿼리 문자열 부분을 제거 할 수 있습니다. 이 경우 라우팅 메커니즘은 내가 원하는 방법으로 호출을 라우팅 할 수 있습니다.

그래서 요청이 MyServer를/mydata을 할 수 있는가? appKey = 12345하지만 다음 (가 appKey의 흔적)

[Route] 
public HttpResponseMessage GetMyData() 
1

아직 이유를 알지 못합니다.

아무튼 : 라우팅 속성을 사용해 보셨습니까? 비슷한 :

[Route("myserver/mydata?appKey={key}")] 
[HttpPost] 
public public HttpResponseMessage GetMyData() { ... } 

나는 테스트하지 않았지만, 덕분에 Route 속성이 URL과 함께 호출됩니다. 시도 해봐. 여기

추가 정보 :

http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

+0

그 이유는 쿼리 문자열의 appKey가 응용 프로그램의 인증 레이어 (특히 델리게이트 처리기)에서 처리되기 때문입니다. 나는 이것을 요청의 실제 처리 (컨트롤러와 그 메소드들)에 포함시키지 않기를 바란다. 이것은 웹 API 라우팅이 기본적으로 작동하는 방식이 아닙니다. 쿼리 문자열에 무언가가있는 경우 솔루션을 찾고있었습니다. 내가 말한 것처럼 내가 발견 한 것은 Message.RequestUri를 변경하고 델리게이트 처리기에서 여전히 쿼리 문자열에서 appKey를 제거하는 것입니다. – papadi

관련 문제