У нас есть спокойное веб-приложение, написанное на .NET (4.6.1), которое имеет следующий UriTemplate:
[OperationContract]
[WebGet(UriTemplate = "/GetAssociationLevelCustomerData/{environment}/{AssetKeyFilter=-1}/{UsersTZOffset=0}",
ResponseFormat = WebMessageFormat.Json)]
public PLEGatewayCore.Entities.M2MDB.DSPAssociationItem GetAssociationLevelCustomerItem(string environment, String AssetKeyFilter, string UsersTZOffset)
Затем у нас есть классическое приложение ASP (3.0) (VbScript), пытающееся получитьданные от него с помощью следующего механизма:
Sub ExecuteWebRequest(strMethod, url, data, intStatus, strResponse)
Dim webRequest
'On Error Resume Next
Set webRequest = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
If Err.Number <> 0 Then
intStatus = -1
strResponse = "(" & Err.Number & ") " & Err.Description
Else
With webRequest
.Open strMethod, url, false
.SetRequestHeader "Content-Type", "application/json"
.SetRequestHeader "Authorization", Session("ses_APIToken")
.SetRequestHeader "Ver", "3.0"
.SetRequestHeader "SourceId", "3"
IF strMethod = "POST" THEN
.Send data
ELSE
.Send
END IF
If Err.Number <> 0 Then
intStatus = -1
strResponse = "(" & Err.Number & ") " & Err.Description
Else
intStatus = .Status
strResponse = "(" & .Status & ") " & .StatusText
If .Status = "200" Then strResponse = .ResponseText End If
End if
End With
End If
Set webRequest = Nothing
'Exit Sub
End Sub
Примеры:
https://<url>/GetAssociationLevelCustomerData/PROD/6108213631162262528/4
работает
https://<url>/GetAssociationLevelCustomerData/PROD/6108213631162262528
не работает
Что мы замечаем, так это то, что если мы не укажем необязательный / не заданный по умолчанию параметр, например «UsersTZOffset», то запрос не будет выполнен.Если мы запустим URL-адрес из PostMan, у нас нет проблем.Что может вызвать это поведение?Это как-то связано с объектом XMLHttp.6.0, или что-то в конечной точке успокоительного API, или что-то еще полностью?