通过OData在线解决D365事件



我已经为我们的一个客户创建了一个控制器。它应该在POST上运行,并接收带有两个参数的JSON体:idstatuscode

逻辑很简单—我希望获取guid等于id的事件,并根据statuscode的接收值更改其statuscode

控制器代码:
public async Task<MyCustomResponse> CloseIncident([FromBody] MyCustomRequest _request)
{
try 
{
// Some logic here to check if both Id and StatusCode exist in _request ...

if(Guid.TryParse(_request.Id, out Guid guid))
{
// Construct OData request
JObject incidentResolution = new JObject();
incidentResolution.Add("subject", "testing");
incidentResolution.Add("incidentid@odata.bind", $"/incidents({guid})");
incidentResolution.Add("timespent", 2); //This is billable time in minutes
incidentResolution.Add("description", "description");
JObject parameters = new JObject();
parameters.Add("IncidentResolution", incidentResolution);
if (_request.StatusCode == 1)
{
parameters.Add("Status", (int)IncidentStatusCode.ProblemSolved);
}
else
{
parameters.Add("Status", (int)IncidentStatusCode.SomeOtherRejectedStatusCode);
}
RegenerateAccess(); // Connect to Microsoft Online
string urlAPI = "/api/data/v9.1/CloseIncident";
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(_serviceUrl);
client.Timeout = new TimeSpan(0, 2, 0);  //2 minutes  
client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
client.DefaultRequestHeaders.Add("OData-Version", "4.0");
//client.DefaultRequestHeaders.Add("Prefer", "return=representation");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpMethod method = HttpMethod.Post;
HttpRequestMessage request = new HttpRequestMessage(method, urlAPI);
request.Content = new StringContent(parameters.ToString(), Encoding.UTF8, "application/json");
// Set the access token
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _authResult.AccessToken);
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();

return new MyCustomResponse()
{
Status = Status.Success,
Message = "..."
};
}

return new MyCustomResponse()
{
Status = Status.Error,
Message = "..."
};
}
else throw new Exception("Guid is invalid.");
}
catch(Exception ex)
{
return new MyCustomResponse() { Status = Status.Error, Message = ex.Message };
}
}

我收到了一个"错误请求"。从client.SendAsync行。我认为OData体请求是不正确的,但我不知道为什么。

代码看起来很完美。我将尝试添加下面的标题,并查看响应。

client.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8");

在尝试调试时,如果在异常中看到任何有用的错误响应,这将有助于排除故障。

最新更新