2017-12-21 2 views
0

나는 REST 열린 PARAMS 검증

[OperationContract] 
[WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "request?code={codeParam}&name={nameParam}&id={idParam}")] 
List<ResponseData> JSONDataList(string codeParam , string nameParam , string idParam); 

그래서 내가 codeParam, nameParamidParam가 내 요청에 매개 변수가 있습니다.
우리는 "request?name=myName&BlaBlaParam=example"일까요?

이 코드를 요청할 때 정의되지 않은 BlaBlaParam param을 어떻게 잡을 수 있습니까?
서비스는 예외없이 작동합니다.

+0

매개 변수의 값은, 그래서 의심 것 그것은 '수상 액션에 매핑합니다. 요청이 모든 정의 된 경로를 포착 할 가능성이 높습니다. 올바르게 처리하려면 [FromBody]를 수행하고 데이터를 객체로 전달하는 것이 좋습니다. 따라서 서버 앞에서 위생 처리를 한 다음 서버에서 잠재적으로 다시 위생 처리 할 수 ​​있습니다. MVC/WebApi에서 어쨌든. https://stackoverflow.com/questions/11193356/handling-invalid-uri-passed-to-a-wcf-service에서 확인할 수 있습니다. – Greg

답변

0

이 문제에 대한 해결책을 찾았습니다. 쿼리에 포함 된 사전이다 https://books.google.ru/books?id=w02As8L5l7MC&pg=PA29&lpg=PA29&dq=UriTemplateMatch.QueryParameters&source=bl&ots=cXLkc0nU_o&sig=yrsYLZqLB7Im2PrCWZmkGS5kbC4&hl=ru&sa=X&ved=0ahUKEwjlv4aF36TYAhWIBZoKHU64DZwQ6AEIPDAD#v=onepage&q=UriTemplateMatch.QueryParameters&f=false

WebOperationContext webCtx; 
webCtx = WebOperationContext.Current; 
IncomingWebRequestContext incomingCtx; 
incomingCtx = webCtx.IncomingRequest; 
string uri; 
uri = incomingCtx.UriTemplateMatch.RequestUri.ToString(); 
NameValueCollection query; 
query = incomingCtx.UriTemplateMatch.QueryParameters; 
string queryName; 
if (query.Count != 0) 
{ 
     var enumQ = query.GetEnumerator(); 
     while (enumQ.MoveNext()) 
     { 
      queryName = enumQ.Current.ToString(); 
      Console.Writeline{"{0} = {1}", queryName, query[queryName]); 
     } 
} 

: 키 매개 변수의 이름이다가, 값이 프레임 워크 라우팅 적절한 매개 변수를 찾을 것