![](/img/trans.png)
[英]WCF Service: The remote server returned an unexpected response: (400) Bad Request
[英]“Message body is malformed. Unable to map into expected format” response with 400 Bad request when update controller service
嘗試在nifi實例上更新控制器服務時遇到問題。 我嘗試向nifi實例發出“放置”請求並禁用控制器服務。
這是我的邏輯:
獲取特定的控制器服務(controller-services / {id})
將響應消息解析為ControllerServiceEntity對象
更新服務狀態,例如-> currentService.Component.State =“ DISABLED”; (實體的所有部分與第一次我都只更新狀態信息相同)
序列化修改后的服務實例
請求nifi-api放置更新服務(controller-services / {id})
我收到Badrequest響應,消息為“消息正文格式錯誤。無法映射為預期的格式。” 信息。
這是我的看跌期權的方法:
public async Task<T> Put<T>(Uri url,T data) where T:IBaseEntitty
{
T resultEntity = default(T);
using (var client = new HttpClient())
{
var jsonSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var requestContent = new StringContent(JsonConvert.SerializeObject(data,jsonSerializerSettings), Encoding.UTF8, "application/json");
var response = client.PutAsync(url,requestContent);
var content = response.Result.Content;
using (var reader = new StreamReader(await content.ReadAsStreamAsync()))
{
var result = await reader.ReadToEndAsync();
if (response.Result.StatusCode == HttpStatusCode.OK)
{
var template = Newtonsoft.Json.JsonConvert.DeserializeObject(result, typeof(T));
if (template != null)
{
resultEntity = (T)template;
}
}
}
}
return resultEntity;
}
有什么想法嗎?
響應正文應包含一條消息,指示請求失敗的原因。 此外, <NIFI_HOME>/logs/nifi-user.log
和<NIFI_HOME>/logs/nifi-app.log
可能包含更多詳細信息。
另外,我建議您在Web瀏覽器中打開“開發人員工具”以查看這些請求的執行情況。 UI全部使用REST API來實現所有功能。
據我了解,請求消息應該簡短; 我的壞事是將整個實體寄回了。 我在瀏覽器上打開了開發人員工具,檢查了nifi實例自身的請求,並與我的進行了比較:我發現請求只是包含將要更新的屬性,而不是整個實體。
請求正文必須僅包含狀態和修訂信息。 這是在禁用控制器服務時通過nifi-instance發送的請求正文:
{"revision":{"clientId":"644bf345-015d-1000-e82d-047f6a9f9432","version":15},"component":{"id":"015b1030-a099-13d3-812c-77772afcaeb0","state":"DISABLED"}}
我根據此信息更改了代碼。 這是我的示例代碼,用於設置controll-service來禁用:
var controllerService = new ControllerServiceEntity();
controllerService.Id = existingService.Id;
controllerService.Revision = existingService.Revision;
var component = new ControllerServiceDTO();
component.Id = existingService.Component.Id;
component.State = "DISABLED";
controllerService.Component = component;
在我發送新的控制服務實例而不是現有的實例之后,它按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.